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 mango
almak için bölme :
"abcd mango kiwi peach"
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 mango
almak için bölme :
"abcd mango kiwi peach"
Yanıtlar:
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+1
elemanları).
s.split('mango', 1)[1]
>>> s = "123mango abcd mango kiwi peach"
>>> s.split("mango", 1)
['123', ' abcd mango kiwi peach']
>>> s.split("mango", 1)[1]
' abcd mango kiwi peach'
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 -1
herhangi bir zarar görmeyecek çünkü olay sayısı zaten bir olarak ayarlanmıştır.
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.partition
her 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 .
df.columnname[1].split('.', 1)
Bu, verileri ilk '.' dizesinde veya veri çerçevesi sütun değerinde.
maxsplit
sayıma ulaştıktan sonra daha fazla bölme gerçekleştirilebiliyorsa , listedeki son öğe dizenin kalanını içerecektir (sep
karakter / dizeler dahil).