Python, split aby rozdzielić ciąg oddzielony przecinkami, usunąć białe znaki i przekonwertować na listę

Biznes

Podczas dzielenia łańcucha rozdzielonego przecinkami na listę w Pythonie, jeśli nie ma spacji pomiędzy nimi, zadziała po prostu split(). Jeśli są spacje, warto połączyć to z funkcją strip(), aby usunąć dodatkowe spacje. Dodatkowo, używanie notacji list comprehension jest sprytnym sposobem pisania.

W tym rozdziale najpierw wyjaśniamy, co następuje.

  • Podziel łańcuch z podanym ogranicznikiem i zwróć go jako listęsplit()
  • Usuwa dodatkowe znaki z początku i końca łańcucha.strip()
  • Notacja list comprehension do stosowania funkcji i metod do elementów listy.

Pokazuje również jak utworzyć listę łańcuchów oddzielonych spacjami i przecinkami poprzez usunięcie spacji, jak pokazano poniżej.
'one, two, three'

Ponadto omówimy następujące zagadnienia

  • Jak uzyskać go w postaci listy liczb
  • Jak użyć join() aby połączyć listę i zrobić z niej ponownie ciąg znaków

split(): Podziel łańcuch z podanym ogranicznikiem i zwróć go jako listę

Używając metody split() dla łańcuchów, możesz podzielić łańcuch za pomocą określonego ogranicznika i otrzymać go jako listę (tablicę). Określony separator może być określony przez następujący argument.sep

Jeśli pominięto argument sep i nie podano ogranicznika, to dzieli ona łańcuch na spacje i zwraca listę. Kolejne spacje i tabulatory również podzielą listę, więc jeśli chcesz utworzyć listę łańcuchów z ograniczeniem tabulacji, możesz użyć split() bez argumentu.

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']

Jeśli w argumencie sep podano separator, to dzieli on listę przez ten łańcuch i zwraca listę.

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

W przypadku łańcucha rozdzielonego przecinkami, jeśli nie ma dodatkowej białej spacji, nie ma problemu, ale jeśli uruchomisz split() z przecinkiem jako ogranicznikiem dla łańcucha rozdzielonego przecinkiem + białą spacją, skończysz z listą łańcuchów z białą spacją pozostawioną na początku.

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

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

Możesz użyć przecinka + spacji jako ogranicznika w następujący sposób, ale to nie zadziała, jeśli liczba spacji w oryginalnym łańcuchu jest inna.', '

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

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

Metoda string strip(), która zostanie wyjaśniona za chwilę, może być użyta do radzenia sobie z dwoma spacjami.

strip(): Usuwa dodatkowe znaki z początku i końca łańcucha.

strip() jest metodą służącą do usuwania dodatkowych znaków z początku i końca łańcucha znaków.

Jeśli argument jest pominięty, zwracany jest nowy łańcuch z usuniętymi znakami białych spacji. Sam oryginalny łańcuch nie jest zmieniany.

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

print(s)
#   one  

Jeżeli jako argument podano łańcuch, to znaki zawarte w tym łańcuchu zostaną usunięte.

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

W tym przypadku, spacje nie są usuwane. Dlatego, jeśli chcesz usunąć również białe znaki, jako argument podaj łańcuch zawierający spacje, jak pokazano poniżej.'-+ '

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

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

strip() obsługuje oba końce, ale dostępne są również następujące funkcje.

  • lstrip():Proces to dopiero początek
  • rstrip():Przetwarzaj tylko koniec linii.

Notacja rozumienia listy: zastosowanie funkcji i metod do elementów listy.

Jeśli chcesz zastosować funkcję lub metodę do elementów listy, mądrze jest użyć notacji list comprehension zamiast pętli for, jeśli chcesz otrzymać listę na końcu.

Tutaj, zastosujemy strip() do listy otrzymanej przez podzielenie łańcucha znaków za pomocą split(). Dodatkowe białe znaki w oddzielonym przecinkami łańcuchu zawierającym białe znaki mogą zostać usunięte, aby utworzyć listę.

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

Kiedy jest to zastosowane do pustego łańcucha, można uzyskać listę z pojedynczym pustym łańcuchem jako elementem.

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

Jeśli chcesz uzyskać pustą listę dla pustego łańcucha, możesz skonfigurować gałąź warunkową w notacji list comprehension.

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

'one, , three'
Ponadto, jeśli brakuje elementu rozdzielonego przecinkami, jak opisano powyżej, pierwsza metoda wyświetli go jako pusty element łańcuchowy.

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

Jeśli chcesz zignorować brakujące części, możesz skonfigurować gałąź warunkową w notacji list comprehension.

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

Otrzymać jako listę liczb

Jeśli chcesz otrzymać oddzielony przecinkami ciąg liczb jako listę liczb zamiast łańcucha, zastosuj int() lub float() aby przekonwertować ciąg na liczbę w notacji listowej.

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(): Połącz listę i otrzymaj ją jako ciąg znaków

W odwrotnym schemacie, jeśli chcesz dołączyć do listy i uzyskać ciągi oddzielone określonym ogranicznikiem, użyj metody join().

Łatwo jest popełnić błąd, ale zauważ, że join() jest metodą łańcuchową, a nie listową. Lista jest określona jako 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

Możesz to zapisać w jednej linii w następujący sposób.

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

Jeśli chcesz tylko zmienić stały delimiter, łatwiej jest zastąpić go metodą replace().

s = 'one,two,three'
s_new = s.replace(',', '+')
print(s_new)
# one+two+three