อะไรจะเป็นวิธีที่ดีที่สุดในการแบ่งสตริงในการเกิดขึ้นครั้งแรกของตัวคั่น?
ตัวอย่างเช่น:
"123mango abcd mango kiwi peach"
แยกเป็นคนแรกที่mango
จะได้รับ:
"abcd mango kiwi peach"
อะไรจะเป็นวิธีที่ดีที่สุดในการแบ่งสตริงในการเกิดขึ้นครั้งแรกของตัวคั่น?
ตัวอย่างเช่น:
"123mango abcd mango kiwi peach"
แยกเป็นคนแรกที่mango
จะได้รับ:
"abcd mango kiwi peach"
คำตอบ:
จากเอกสาร :
str.split([sep[, maxsplit]])
ส่งคืนรายการคำในสตริงโดยใช้sepเป็นสตริงตัวคั่น หากmaxsplitได้รับการแยกmaxsplitส่วนใหญ่จะเสร็จสิ้น (ดังนั้นรายการจะมี
maxsplit+1
องค์ประกอบมากที่สุด)
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'
สำหรับฉันวิธีที่ดีกว่าคือ:
s.split('mango', 1)[-1]
... เพราะถ้าเกิดขึ้นสิ่งนั้นไม่อยู่ในสตริคุณจะได้ "IndexError: list index out of range"
"
ดังนั้น-1
จะไม่ได้รับอันตรายใด ๆ ทำให้เกิดการตั้งค่าหมายเลขหนึ่งแล้ว
คุณยังสามารถใช้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'
ข้อได้เปรียบของการใช้str.partition
คือมันจะส่งคืน tuple ในแบบฟอร์มเสมอ:
(<pre>, <separator>, <post>)
ดังนั้นนี้จะทำให้การเอาออกเอาท์พุทที่มีความยืดหยุ่นมากเช่นมีเสมอจะเป็น 3 องค์ประกอบใน tuple ที่เกิด
df.columnname[1].split('.', 1)
สิ่งนี้จะแบ่งข้อมูลด้วยการปรากฏครั้งแรกของ '.' ในค่าสตริงหรือคอลัมน์ข้อมูลกรอบ
maxsplit
นับองค์ประกอบสุดท้ายในรายการจะมีส่วนที่เหลือของสตริง (รวมถึงsep
ตัวอักษร / สตริงใด ๆ)