Podział przy pierwszym wystąpieniu

309

Jaki byłby najlepszy sposób podzielenia łańcucha przy pierwszym wystąpieniu separatora?

Na przykład:

"123mango abcd mango kiwi peach"

podział na pierwszy, mangoaby uzyskać:

"abcd mango kiwi peach"
Żołądź
źródło

Odpowiedzi:

522

Z dokumentów :

str.split([sep[, maxsplit]])

Zwraca listę słów w ciągu, używając sep jako ciągu ogranicznika. Jeśli maxsplit podana jest co najwyżej maxsplit podziały są zrobione (a więc lista będzie mieć co najwyżej maxsplit+1elementów).

s.split('mango', 1)[1]
Ignacio Vazquez-Abrams
źródło
Uwaga: jeśli po osiągnięciu maxsplitliczby można wykonać więcej podziałów , ostatni element na liście będzie zawierał resztę ciągu (łącznie z dowolnymi sepznakami / ciągami znaków).
BuvinJ
64
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'
utdemir
źródło
8
@Swiss: Więc co. Technika jest nadal taka sama.
Ignacio Vazquez-Abrams
6
@Ignacio: Po prostu to podkreślam. Nie ma powodu, aby mieć częściowo poprawną odpowiedź zamiast całkowicie poprawnej.
Szwajcarski
Technicznie zakłada prawidłowy separator. „Pierwszy” to indeks [1]. Tym, do którego wszyscy się odwołujemy, byłby oczywiście indeks zerowy. : D Semantyka.
Izaac Corbett
27

Dla mnie lepsze podejście jest takie:

s.split('mango', 1)[-1]

... bo jeśli tak się stanie, to wystąpienie nie jest w ciągu, dostaniesz " IndexError: list index out of range".

Dlatego -1nie odniesie żadnej szkody, ponieważ liczba wystąpień jest już ustawiona na jeden.

Alex
źródło
1
Jak napisano wcześniej, jest to liczba wystąpień, w których stosowana jest metoda split (). Metoda znajdzie i zastosuje tylko pierwszy ciąg „mango”.
Alex
2

Możesz także użyć str.partition:

>>> text = "123mango abcd mango kiwi peach"

>>> text.partition("mango")
('123', 'mango', ' abcd mango kiwi peach')

>>> text.partition("mango")[-1]
' abcd mango kiwi peach'

>>> text.partition("mango")[-1].lstrip()  # if whitespace strip-ing is needed
'abcd mango kiwi peach'

Zaletą użycia str.partitionjest to, że zawsze zwróci krotkę w postaci:

(<pre>, <separator>, <post>)

Dzięki temu rozpakowywanie danych wyjściowych jest naprawdę elastyczne, ponieważ w wynikowej krotce zawsze będą 3 elementy.

heemayl
źródło
-2
df.columnname[1].split('.', 1)

Spowoduje to podzielenie danych przy pierwszym wystąpieniu „.” w wartości kolumny ciągu lub ramki danych.

himanshu arora
źródło