Apa yang akan menjadi cara terbaik untuk memisahkan sebuah string pada kemunculan pembatas pertama kali?
Sebagai contoh:
"123mango abcd mango kiwi peach"
berpisah pada yang pertama mango
untuk mendapatkan:
"abcd mango kiwi peach"
Apa yang akan menjadi cara terbaik untuk memisahkan sebuah string pada kemunculan pembatas pertama kali?
Sebagai contoh:
"123mango abcd mango kiwi peach"
berpisah pada yang pertama mango
untuk mendapatkan:
"abcd mango kiwi peach"
Jawaban:
Dari dokumen :
str.split([sep[, maxsplit]])
Kembalikan daftar kata-kata dalam string, menggunakan sep sebagai string pembatas. Jika maxsplit diberikan, paling banyak pembagian maxsplit dilakukan (dengan demikian, daftar akan memiliki paling banyak
maxsplit+1
elemen).
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'
Bagi saya pendekatan yang lebih baik adalah:
s.split('mango', 1)[-1]
... karena jika terjadi kejadian itu tidak ada dalam string, Anda akan mendapatkan " IndexError: list index out of range"
.
Karena itu -1
tidak akan mendapatkan kerugian karena jumlah kejadian sudah diatur ke satu.
Anda juga dapat menggunakan 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'
Keuntungan menggunakan str.partition
adalah selalu mengembalikan tuple dalam bentuk:
(<pre>, <separator>, <post>)
Jadi ini membuat membongkar output sangat fleksibel karena selalu ada 3 elemen dalam tuple yang dihasilkan.
df.columnname[1].split('.', 1)
Ini akan membagi data dengan kemunculan pertama '.' dalam nilai kolom string atau data frame.
maxsplit
hitungan, elemen terakhir dalam daftar akan berisi sisa string (termasuk semuasep
karakter / string).