2011-08-01 12 views
183

Jaki byłby najlepszy sposób rozdzielenia ciągu znaków na pierwszym wystąpieniu ogranicznika?Podział na pierwsze wystąpienie

Na przykład:

"123mango abcd mango kiwi peach" 

łupania na pierwszym mango dostać:

"abcd mango kiwi peach" 
+0

Co to jest ogranicznik? Mówisz, że się dzielisz, ale gdzie jest pierwsza część? Twój przykład nie jest wcale jasny! – GaretJax

+1

Przepraszam, zapomniałem wspomnieć o ograniczniku! – Acorn

Odpowiedz

287

Od the docs:

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

Wyświetl listę słów w łańcuchu, używając sep jako ciągu ogranicznika. Jeśli podana jest wartość maxsplit, zostaną wykonane co najwyżej rozszczepienia (dlatego lista będzie zawierać co najwyżej maxsplit+1 elementów).

s.split('mango', 1)[1] 
44
>>> s = "123mango abcd mango kiwi peach" 
>>> s.split("mango", 1) 
['123', ' abcd mango kiwi peach'] 
>>> s.split("mango", 1)[1] 
' abcd mango kiwi peach' 
+0

Zakłada to niewłaściwy ogranicznik. – Swiss

+4

@ Siss: Więc co. Technika jest wciąż taka sama. –

+4

@Ignacio: Po prostu to wskazuję. Nie ma powodu, aby częściowo poprawną odpowiedź zastąpić całkowicie poprawną. – Swiss

17

Dla mnie lepszym rozwiązaniem jest to, że:

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

... bo jeśli zdarza się, że zdarzenie nie jest w ciągu dostaniesz "IndexError: list index out of range"

Dlatego -1. nie spowoduje żadnych szkód, ponieważ liczba wystąpień jest już ustawiona na 1.

+0

Co oznacza "1" po "mango"? – FaCoffee

+0

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

0

Tutaj jest itertools podejście:

s = "123mango abcd mango kiwi peach" 
"".join(it.islice(it.dropwhile(lambda x: x != " ", s), 1, None)) 
#'abcd mango kiwi peach' 
Powiązane problemy