Python, split til at opdele en kommasepareret streng, fjerne mellemrum og konvertere til en liste

Forretning

Når du deler en kommasepareret streng op i en liste i Python, virker split(), hvis der ikke er mellemrum imellem, bare. Hvis der er mellemrum, er det nyttigt at kombinere det med strip() for at fjerne de ekstra mellemrum. Desuden er det smart at bruge list comprehension notation.

I dette afsnit forklarer vi først følgende.

  • Opdel en streng med en specificeret afgrænser og returnerer den som en listesplit()
  • Fjern ekstra tegn fra begyndelsen og slutningen af en streng.strip()
  • Notation af listeforståelse til at anvende funktioner og metoder på listeelementer.

Den viser også, hvordan man laver en liste over strenge adskilt af mellemrum og kommaer ved at fjerne mellemrum, som vist nedenfor.
'one, two, three'

Derudover vil vi drøfte følgende

  • Sådan får du den som en liste med tal
  • Sådan bruger du join() til at samle en liste og gøre den til en streng igen

split(): Opdel en streng med en specificeret afgrænser og returnerer den som en liste

Ved hjælp af metoden split() for strenge kan du opdele en streng med en specificeret afgrænser og hente den som en liste (array). Den angivne afgrænser kan angives med følgende argument.sep

Hvis argumentet sep udelades, og der ikke er angivet nogen afgrænser, deler den strengen med mellemrum og returnerer en liste. På hinanden følgende mellemrum og tabulatortegn vil også opdele listen, så hvis du ønsker at lave en liste af tabulatorafgrænsede strenge, kan du bruge split() uden 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']

Hvis der er angivet en afgrænser i argumentet sep, deler den listen med denne streng og returnerer en liste.

s = 'one::two::three'
l = s.split('::')
print(l)
# ['one', 'two', 'three']

I tilfælde af en kommasepareret streng er der ikke noget problem, hvis der ikke er ekstra hvidt mellemrum, men hvis du kører split() med et komma som afgrænser for en streng, der er adskilt af et komma + hvidt mellemrum, vil du ende med en liste af strenge med hvidt mellemrum tilbage i begyndelsen.

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 bruge et komma + mellemrum som afgrænser som følger, men det virker ikke, hvis antallet af mellemrum i den oprindelige streng er anderledes.', '

s = 'one, two, three'
l = s.split(', ')
print(l)
# ['one', 'two', 'three']

s = 'one, two,  three'
l = s.split(', ')
print(l)
# ['one', 'two', ' three']

Strengmetoden strip(), som vil blive forklaret næste gang, kan bruges til at håndtere to mellemrum.

strip(): Fjern ekstra tegn fra begyndelsen og slutningen af en streng.

strip() er en metode til at fjerne ekstra tegn fra begyndelsen og slutningen af en streng.

Hvis argumentet udelades, returneres en ny streng, hvor mellemrumstegnene er fjernet. Selve den oprindelige streng ændres ikke.

s = '  one  '
print(s.strip())
# one

print(s)
#   one  

Hvis en streng er angivet som argument, fjernes de tegn, der er indeholdt i strengen.

s = '-+-one-+-'
print(s.strip('-+'))
# one

I dette tilfælde fjernes mellemrum ikke. Hvis du derfor også vil fjerne mellemrum, skal du sende en streng med mellemrum som argument, som vist nedenfor.'-+ '

s = '-+- one -+-'
print(s.strip('-+'))
#  one 

s = '-+- one -+-'
print(s.strip('-+ '))
# one

strip() håndterer begge ender, men følgende funktioner er også tilgængelige.

  • lstrip():Processen er kun begyndelsen
  • rstrip():Behandler kun enden af linjen.

Notation af listeforståelse: anvendelse af funktioner og metoder på listeelementer

Hvis du vil anvende en funktion eller metode på elementerne i en liste, er det smart at bruge list comprehension-notationen i stedet for for loopet, hvis du vil have listen til sidst.

Her anvender vi strip() på den liste, der er opnået ved at opdele strengen med split(). Det ekstra mellemrum i en kommasepareret streng, der indeholder mellemrum, kan fjernes for at lave en liste.

s = 'one, two, three'
l = [x.strip() for x in s.split(',')]
print(l)
# ['one', 'two', 'three']

Når dette anvendes på en tom streng, kan man få en liste med en enkelt tom streng som element.

s = ''
l = [x.strip() for x in s.split(',')]
print(l)
print(len(l))
# ['']
# 1

Hvis du vil have en tom liste for en tom streng, kan du oprette en betinget forgrening i listeforståelsesnotationen.

s = ''
l = [x.strip() for x in s.split(',') if not s == '']
print(l)
print(len(l))
# []
# 0

'one, , three'
Hvis der mangler et kommasepareret element, som beskrevet ovenfor, vil den første metode også angive det som et tomt strengelement.

s = 'one, , three'
l = [x.strip() for x in s.split(',')]
print(l)
print(len(l))
# ['one', '', 'three']
# 3

Hvis du ønsker at ignorere de manglende dele, kan du oprette en betinget forgrening i listeforståelsesnotationen.

s = 'one, ,three'
l = [x.strip() for x in s.split(',') if not x.strip() == '']
print(l)
print(len(l))
# ['one', 'three']
# 2

Hent som en liste af tal

Hvis du ønsker at få en kommasepareret talstreng som en liste af tal i stedet for en streng, skal du anvende int() eller float() til at konvertere strengen til et tal i listeforståelsesnotationen.

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(): Flette en liste og få den som en streng

I det modsatte mønster, hvis du ønsker at sammenføje en liste og få strenge adskilt af en bestemt afgrænser, skal du bruge metoden join().

Det er let at begå en fejl, men bemærk, at join() er en strengmetode, ikke en listemetode. Listen er angivet som et 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 skrive det i én linje på følgende måde.

s = 'one, two,  three'
s_new = '-'.join([x.strip() for x in s.split(',')])
print(s_new)
# one-two-three

Hvis du blot ønsker at ændre en fast afgrænser, er det nemmere at erstatte den med metoden replace().

s = 'one,two,three'
s_new = s.replace(',', '+')
print(s_new)
# one+two+three
Copied title and URL