2011-08-01 11 views
183

Bir sınırlayıcının ilk oluşumunda bir dizeyi ayırmanın en iyi yolu ne olurdu?İlk oluşumda bölme

Örneğin: İlk mango üzerine

"123mango abcd mango kiwi peach" 

bölme almak için: the docs itibaren

"abcd mango kiwi peach" 
+0

Ayırıcı nedir? Ayrıldığını söylüyorsun, ama ilk kısım nerede? Örneğiniz hiç belli değil! – GaretJax

+1

Üzgünüm, sınırlayıcıyı söylemeyi unutma! – Acorn

cevap

287

:

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

Dizgideki sözcüklerin bir listesini, sınırlayıcı dizesi olarak sep kullanarak döndür. maxsplit verilirse, en fazla maxsplit bölünmeler yapılır (bu nedenle, liste en fazla maxsplit+1 öğeye sahip olacaktır). . O oluşumunu olur çünkü "alırsınız IndexError: list index out of range"

nedenle -1 dizede değil ...

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

:

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

Bu, yanlış sınırlayıcıyı varsayar. – Swiss

+4

@Swiss: Peki, ne oldu? Teknik hala aynı. –

+4

@Ignacio: Sadece işaret ediyorum. Tamamen doğru olanın yerine kısmen doğru bir cevaba sahip olmak için bir sebep yok. – Swiss

17

Benim için daha iyi bir yaklaşım olduğunu herhangi bir zarara yol açmayacaktır. Olayların sayısı zaten bir taneye ayarlanmıştır.

+0

'Mango'dan sonra' 'anlamı nedir? – FaCoffee

+0

Daha önce yazıldığı gibi, yöntem bölme() uygulanmakta olan olay sayısıdır. Yöntem sadece ilk 'mango' dizesini bulur ve uygular. – Alex

0

İşte bir itertools yaklaşım:

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