แยกบนตัวคั่นสุดท้ายในสตริง Python หรือไม่


203

Python idiom ที่แนะนำสำหรับการแยกสตริงในการเกิดขึ้นครั้งสุดท้ายของตัวคั่นในสตริงคืออะไร? ตัวอย่าง:

# instead of regular split
>> s = "a,b,c,d"
>> s.split(",")
>> ['a', 'b', 'c', 'd']

# ..split only on last occurrence of ',' in string:
>>> s.mysplit(s, -1)
>>> ['a,b,c', 'd']

mysplitใช้อาร์กิวเมนต์ที่สองที่เกิดขึ้นของตัวคั่นที่จะแยก เช่นเดียวกับการจัดทำดัชนีรายการปกติ-1หมายถึงรายการสุดท้ายจากท้ายสุด สิ่งนี้สามารถทำได้?

คำตอบ:


355

ใช้.rsplit() หรือ.rpartition()แทน:

s.rsplit(',', 1)
s.rpartition(',')

str.rsplit()ช่วยให้คุณระบุจำนวนครั้งที่จะแยกในขณะที่str.rpartition()แยกเพียงครั้งเดียว แต่จะส่งกลับจำนวนองค์ประกอบคงที่เสมอ (คำนำหน้าตัวคั่นและ postfix) และจะเร็วกว่าสำหรับเคสแบบแยกเดี่ยว

การสาธิต:

>>> s = "a,b,c,d"
>>> s.rsplit(',', 1)
['a,b,c', 'd']
>>> s.rsplit(',', 2)
['a,b', 'c', 'd']
>>> s.rpartition(',')
('a,b,c', ',', 'd')

ทั้งสองวิธีเริ่มแยกจากด้านขวาของสตริง โดยให้str.rsplit()ค่าสูงสุดเป็นอาร์กิวเมนต์ที่สองคุณจะได้รับการแยกเหตุการณ์ที่เกิดขึ้นทางขวามือ



5

ฉันแค่ทำเพื่อความสนุก

    >>> s = 'a,b,c,d'
    >>> [item[::-1] for item in s[::-1].split(',', 1)][::-1]
    ['a,b,c', 'd']

ข้อควรระวัง : อ้างถึงความคิดเห็นแรกในด้านล่างซึ่งคำตอบนี้อาจผิดไป


2
'เพื่อความสนุก' แต่ยังผิดมากเพราะถ้าตัวคั่นไม่ได้เป็นเพียงตัวละครเดียวหรือตัวละครซ้ำรอยแยกของคุณจะเลือกอย่างดีที่สุดจุดผิดที่จะแยก
Martijn Pieters
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.