När du delar upp en kommaseparerad sträng till en lista i Python fungerar bara split() om det inte finns några mellanslag mellan dem. Om det finns mellanslag är det användbart att kombinera det med strip() för att ta bort de extra mellanslagen. Dessutom är det ett smart sätt att skriva genom att använda list comprehension-notationen.
I det här avsnittet förklarar vi först följande.
- Dela en sträng med en angiven avgränsare och återge den som en lista.
split()
- Ta bort extra tecken från början och slutet av en sträng.
strip()
- Notering av listförståelse för att tillämpa funktioner och metoder på listelement.
Den visar också hur man gör en lista med strängar som är separerade med mellanslag och kommatecken genom att ta bort mellanslag, som visas nedan.'one, two, three'
Dessutom kommer vi att diskutera följande
- Hur du får den som en lista med siffror
- Hur man använder join() för att sammanfoga en lista och göra den till en sträng igen
split(): Dela en sträng med en angiven avgränsare och återge den som en lista.
Med metoden split() för strängar kan du dela upp en sträng med en angiven avgränsare och hämta den som en lista (array). Den angivna avgränsaren kan anges med följande argument.sep
Om argumentet sep utelämnas och ingen avgränsare anges, delas strängen med mellanslag och en lista returneras. På varandra följande mellanslag och tabulatorer delar också upp listan, så om du vill skapa en lista med tabulaturavgränsade strängar kan du använda split() utan argumentet.
s = 'one two three' l = s.split() print(l) # ['one', 'two', 'three'] s = 'one two three' l = s.split() print(l) # ['one', 'two', 'three'] s = 'one\ttwo\tthree' l = s.split() print(l) # ['one', 'two', 'three']
Om en avgränsare anges i argumentet sep delas listan med den strängen och en lista returneras.
s = 'one::two::three' l = s.split('::') print(l) # ['one', 'two', 'three']
När det gäller en kommaseparerad sträng är det inget problem om det inte finns något extra vitrymd, men om du kör split() med ett kommatecken som avgränsare för en sträng som är separerad med ett kommatecken + vitrymd kommer du att få en lista med strängar med vitrymd kvar i början.
s = 'one,two,three' l = s.split(',') print(l) # ['one', 'two', 'three'] s = 'one, two, three' l = s.split(',') print(l) # ['one', ' two', ' three']
Du kan använda ett kommatecken + mellanslag som avgränsare enligt följande, men det fungerar inte om antalet mellanslag i den ursprungliga strängen är annorlunda.', '
s = 'one, two, three' l = s.split(', ') print(l) # ['one', 'two', 'three'] s = 'one, two, three' l = s.split(', ') print(l) # ['one', 'two', ' three']
Strängmetoden strip(), som förklaras härnäst, kan användas för att hantera två mellanslag.
strip(): Ta bort extra tecken från början och slutet av en sträng.
strip() är en metod för att ta bort extra tecken från början och slutet av en sträng.
Om argumentet utelämnas returneras en ny sträng med vitrymder borttagna. Den ursprungliga strängen ändras inte.
s = ' one ' print(s.strip()) # one print(s) # one
Om en sträng anges som argument tas tecknen i strängen bort.
s = '-+-one-+-' print(s.strip('-+')) # one
I detta fall tas inte mellanslag bort. Om du vill ta bort vitrymder också, skicka därför en sträng med mellanslag som argument, enligt nedan.'-+ '
s = '-+- one -+-' print(s.strip('-+')) # one s = '-+- one -+-' print(s.strip('-+ ')) # one
strip() hanterar båda ändarna, men följande funktioner är också tillgängliga.
lstrip()
:Processen är bara börjanrstrip()
:Behandlar endast slutet av linjen.
Notering av listförståelse: tillämpa funktioner och metoder på listelement.
Om du vill tillämpa en funktion eller metod på elementen i en lista är det smart att använda list comprehension-notationen i stället för for-slingan om du vill få listan i slutet.
- Relaterade artiklar:Användning av Pythons listförståelse notation
Här tillämpar vi strip() på den lista som erhålls genom att dela strängen med split(). De extra vitrymderna i en kommaseparerad sträng som innehåller vitrymder kan tas bort för att skapa en lista.
s = 'one, two, three' l = [x.strip() for x in s.split(',')] print(l) # ['one', 'two', 'three']
När detta tillämpas på en tom sträng erhålls en lista med en enda tom sträng som element.
s = '' l = [x.strip() for x in s.split(',')] print(l) print(len(l)) # [''] # 1
Om du vill få en tom lista för en tom sträng kan du skapa en villkorlig förgrening i listförståelsenotationen.
s = '' l = [x.strip() for x in s.split(',') if not s == ''] print(l) print(len(l)) # [] # 0
'one, , three'
Om ett kommaseparerat element saknas, enligt beskrivningen ovan, listar den första metoden det som ett tomt strängelement.
s = 'one, , three' l = [x.strip() for x in s.split(',')] print(l) print(len(l)) # ['one', '', 'three'] # 3
Om du vill ignorera de delar som saknas kan du skapa en villkorlig gren i listförståelsenotationen.
s = 'one, ,three' l = [x.strip() for x in s.split(',') if not x.strip() == ''] print(l) print(len(l)) # ['one', 'three'] # 2
Hämta en lista med siffror
Om du vill få en kommaseparerad sträng av siffror som en lista med siffror i stället för en sträng, använd int() eller float() för att konvertera strängen till en siffra i listförståelsenotationen.
s = '1, 2, 3, 4' l = [x.strip() for x in s.split(',')] print(l) print(type(l[0])) # ['1', '2', '3', '4'] # <class 'str'> s = '1, 2, 3, 4' l = [int(x.strip()) for x in s.split(',')] print(l) print(type(l[0])) # [1, 2, 3, 4] # <class 'int'>
join(): Slå ihop en lista och få den som en sträng
Om du vill sammanfoga en lista och få strängar separerade med en viss avgränsare använder du metoden join().
Det är lätt att göra ett misstag, men notera att join() är en strängmetod, inte en listmetod. Listan anges som ett argument.
s = 'one, two, three' l = [x.strip() for x in s.split(',')] print(l) # ['one', 'two', 'three'] print(','.join(l)) # one,two,three print('::'.join(l)) # one::two::three
Du kan skriva det på en rad på följande sätt.
s = 'one, two, three' s_new = '-'.join([x.strip() for x in s.split(',')]) print(s_new) # one-two-three
Om du bara vill ändra en fast avgränsare är det enklare att ersätta den med metoden replace().
s = 'one,two,three' s_new = s.replace(',', '+') print(s_new) # one+two+three