2009-12-03 11 views
6

Przeczytałem dokumentację, ale nie do końca rozumiem, jak to zrobić.Jak podzielić ciąg znaków w Pythonie?

Rozumiem, że muszę mieć jakiś rodzaj identyfikatora w ciągu znaków, aby funkcje mogły znaleźć miejsce, w którym można podzielić ciąg znaków (chyba że mogę wskazać pierwsze miejsce w zdaniu?).

Na przykład, jak podzielić: "Sico87 is an awful python developer" na "Sico87" i "is an awful Python developer"?

Ciągi są pobierane z bazy danych (jeśli ma to znaczenie).

+1

Twój dodatek nie jest odpowiedni. Zadaj nowe pytanie. – SilentGhost

+1

Jak było niewłaściwe? Zadaje to samo pytanie, ale z przykładami kodu? Mów o pedantyce! – Udders

+2

To nie jest pedanteria.StackOverflow jest przydatny właśnie dlatego, że oddzielne pytania są rozdzielone, więc dobre odpowiedzi na to precyzyjne pytanie unoszą się na wierzch. Używanie Pythona w dowolnym szablonie, z którego korzystasz, jest bardzo prostopadłe do tego, jak podzielić ciąg znaków. –

Odpowiedz

14

Użyj partition(' '), który zawsze zwraca trzy elementy w krotce - pierwszy bit do góry, aż do separatora, separatora, a następnie bity po. Automaty w krotce, które nie mają zastosowania, nadal istnieją, po prostu ustawione jako puste ciągi.

Przykłady: "Sico87 is an awful python developer".partition(' ') powraca ["Sico87"," ","is an awful python developer"]

"Sico87 is an awful python developer".partition(' ')[0] powraca "Sico87"

alternatywę trudniejsze sposobem jest użycie split(' ',1) który działa similiarly ale zwraca się zmienną liczby elementów. Zwróci krotkę jednego lub dwóch elementów, przy czym pierwszy element jest pierwszym słowem, aż do separatora, a drugi jest pozostałą częścią łańcucha (jeśli istnieje).

+2

Niewłaściwe użycie argumentu 'maxsplit' – abyx

+1

thx tox, zobaczyłem i naprawiłem go podczas dodawania twojego komentarza :) – Will

+1

Nie wiem, czy powiedziałbym, że podzielenie z maxsplit jest trudniejsze, po prostu sprawia, że ​​rozpakowywanie krotek nie działa. Zgadzam się jednak z wykorzystaniem rozpakowywania partycji i tupli dla takich przypadków; jest zwięzły i spójny. –

19

Użyj metody split na sznurkach:

>>> "Sico87 is an awful python developer".split(' ', 1) 
['Sico87', 'is an awful python developer'] 

Jak to działa:

  1. Każdy łańcuch jest obiektem. Obiekty ciągów mają określone metody, takie jak split w tym przypadku. Dzwonisz do nich za pomocą obj.<methodname>(<arguments>).
  2. Pierwszy argument dla split jest znakiem, który oddziela poszczególne podciągi. W tym przypadku jest to spacja, ' '.
  3. Drugi argument to liczba powtórzeń, które należy wykonać. W twoim przypadku jest to 1. Pomijając ten drugi argument dotyczy podział tak często, jak to możliwe:

    >>> "Sico87 is an awful python developer".split(' ') 
    ['Sico87', 'is', 'an', 'awful', 'python', 'developer'] 
    

Oczywiście można również przechowywać podciągi w oddzielnych zmiennych zamiast listy:

>>> a, b = "Sico87 is an awful python developer".split(' ', 1) 
>>> a 
'Sico87' 
>>> b 
'is an awful python developer' 

Ale należy pamiętać, że spowoduje to problemy, jeśli niektóre wejścia nie zawierają spacji:

>>> a, b = "string_without_spaces".split(' ', 1) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ValueError: need more than 1 value to unpack 
+0

Dzięki fajny sposób wyjaśnienia funkcji podziału – user765443

Powiązane problemy