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"

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]

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'

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.


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.


-2
df.columnname[1].split('.', 1)

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.