İlk olayda bölünme


309

Bir dizgiyi bir sınırlayıcının ilk oluşumunda bölmenin en iyi yolu ne olabilir?

Örneğin:

"123mango abcd mango kiwi peach"

ilk mangoalmak için bölme :

"abcd mango kiwi peach"

Yanıtlar:


522

Gönderen docs :

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

Sınırlayıcı dize olarak sep kullanarak, dizedeki sözcüklerin bir listesini döndürür. Eğer maxsplit verilir en fazla maxsplit böler yapılır (böylece, liste en fazla sahip olacak maxsplit+1elemanları).

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

Not: maxsplitsayıma ulaştıktan sonra daha fazla bölme gerçekleştirilebiliyorsa , listedeki son öğe dizenin kalanını içerecektir ( sepkarakter / dizeler dahil).
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: Ne olmuş yani. Teknik hala aynı.
Ignacio Vazquez-Abrams

6
@Ignacio: Sadece işaret ediyorum. Tamamen doğru bir cevap yerine kısmen doğru bir cevap almak için hiçbir neden yoktur.
İsviçre

Teknik olarak doğru sınırlayıcıyı varsayar. 'İlk' [1] dizinidir. Hepimizin atıfta bulunduğu elbette sıfırıncı endeks olacaktır. : D Anlambilim.
Izaac Corbett

27

Benim için daha iyi yaklaşım şudur:

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

... çünkü bu gerçekleşirse dize içinde olmaz " IndexError: list index out of range".

Bu nedenle -1herhangi bir zarar görmeyecek çünkü olay sayısı zaten bir olarak ayarlanmıştır.


1
Daha önce yazıldığı gibi, split () yönteminin uygulandığı olay sayısıdır. Yöntem yalnızca ilk 'mango' dizesini bulur ve uygular.
Alex

2

Ayrıca şunları kullanabilirsiniz 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'

Kullanmanın avantajı, str.partitionher zaman formda bir demet döndürecek olmasıdır:

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

Böylece , sonuçta ortaya çıkan demette her zaman 3 eleman olacağından, bu, çıktıyı açmayı gerçekten esnek hale getirir .


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

Bu, verileri ilk '.' dizesinde veya veri çerçevesi sütun değerinde.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.