ฉันต้องการที่จะหาตำแหน่ง (หรือดัชนี) str
ของเกิดขึ้นครั้งล่าสุดของสตริงย่อยบางอย่างในสายป้อนให้
ตัวอย่างเช่นสมมติว่าสตริงอินพุตเป็นstr = 'hello'
และสตริงย่อยคือtarget = 'l'
ดังนั้นมันควรจะส่งออก 3
ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันต้องการที่จะหาตำแหน่ง (หรือดัชนี) str
ของเกิดขึ้นครั้งล่าสุดของสตริงย่อยบางอย่างในสายป้อนให้
ตัวอย่างเช่นสมมติว่าสตริงอินพุตเป็นstr = 'hello'
และสตริงย่อยคือtarget = 'l'
ดังนั้นมันควรจะส่งออก 3
ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
คุณสามารถใช้rfind()
หรือลิงค์ Python2:rindex()
rfind()
rindex()
>>> s = 'Hello StackOverflow Hi everybody'
>>> print( s.rfind('H') )
20
>>> print( s.rindex('H') )
20
>>> print( s.rfind('other') )
-1
>>> print( s.rindex('other') )
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: substring not found
ความแตกต่างคือเมื่อย่อยจะไม่พบrfind()
ผลตอบแทน-1
ในขณะที่rindex()
ยกข้อยกเว้นValueError
(ลิงค์ Python2: ValueError
)
หากคุณไม่ต้องการตรวจสอบrfind()
รหัสส่งคืน-1
คุณอาจต้องการrindex()
ที่จะให้ข้อความแสดงข้อผิดพลาดที่เข้าใจได้ มิฉะนั้นคุณสามารถค้นหานาทีที่ค่าที่ไม่คาดคิด-1
มาจากในรหัสของคุณ ...
>>> txt = '''first line
... second line
... third line'''
>>> txt.rfind('\n')
22
>>> txt.rindex('\n')
22
ใช้str.rindex
วิธีการ
>>> 'hello'.rindex('l')
3
>>> 'hello'.index('l')
2
ลองสิ่งนี้:
s = 'hello plombier pantin'
print (s.find('p'))
6
print (s.index('p'))
6
print (s.rindex('p'))
15
print (s.rfind('p'))
more_itertools
เครื่องมือห้องสมุดข้อเสนอสำหรับการหาดัชนีทุกตัวอักษรหรือทั้งหมดสตริง
ป.ร. ให้ไว้
import more_itertools as mit
s = "hello"
pred = lambda x: x == "l"
รหัส
ตัวละคร
ขณะนี้มีrlocate
เครื่องมือที่ใช้ได้:
next(mit.rlocate(s, pred))
# 3
เครื่องมือเสริมคือlocate
:
list(mit.locate(s, pred))[-1]
# 3
mit.last(mit.locate(s, pred))
# 3
สตริง
นอกจากนี้ยังมีwindow_size
พารามิเตอร์สำหรับการค้นหารายการนำของหลายรายการ:
s = "How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
substring = "chuck"
pred = lambda *args: args == tuple(substring)
next(mit.rlocate(s, pred=pred, window_size=len(substring)))
# 59
ยังไม่พยายามที่จะคืนชีพโพสต์ที่ไม่ได้ใช้งาน แต่เนื่องจากยังไม่ได้โพสต์ ...
(นี่คือวิธีที่ฉันทำก่อนค้นหาคำถามนี้)
s = "hello"
target = "l"
last_pos = len(s) - 1 - s[::-1].index(target)
คำอธิบาย: เมื่อคุณค้นหาเหตุการณ์ล่าสุดจริงๆคุณกำลังค้นหาเหตุการณ์แรกในสตริงที่กลับรายการ เมื่อรู้อย่างนี้แล้วฉันก็ทำs[::-1]
(ซึ่งคืนค่าสตริงที่ตรงกันข้าม) จากนั้นทำดัชนีtarget
จากที่นั่น แล้วฉันจะทำlen(s) - 1 - the index found
เพราะเราต้องการดัชนีที่unreversed (เช่นเดิม) สตริง
ระวัง! หากtarget
มีมากกว่าหนึ่งตัวคุณอาจจะไม่พบมันในสตริงที่กลับด้าน เพื่อแก้ไขปัญหานี้ใช้ซึ่งการค้นหาสำหรับรุ่นที่ตรงกันข้ามของlast_pos = len(s) - 1 - s[::-1].index(target[::-1])
target
หากคุณไม่ต้องการใช้rfindวิธีนี้จะทำให้เคล็ดลับ /
def find_last(s, t):
last_pos = -1
while True:
pos = s.find(t, last_pos + 1)
if pos == -1:
return last_pos
else:
last_pos = pos
คุณสามารถใช้rindex()
ฟังก์ชั่นเพื่อรับตัวอักขระสุดท้ายในสตริง
s="hellloooloo"
b='l'
print(s.rindex(b))
Python String rindex () วิธีการ
คำอธิบาย
Python สตริงเมธอด rindex () ส่งคืนดัชนีล่าสุดที่พบสตริงย่อย str หรือยกข้อยกเว้นหากไม่มีดัชนีดังกล่าวอยู่เลือก จำกัด การค้นหาสตริง [beg: end]
วากยสัมพันธ์
ต่อไปนี้เป็นไวยากรณ์สำหรับวิธี rindex () -
str.rindex(str, beg=0 end=len(string))
พารามิเตอร์
str - นี่ระบุสตริงที่จะค้นหา
beg - นี่คือดัชนีเริ่มต้นโดยค่าเริ่มต้นเป็น 0
len - นี่คือดัชนีสิ้นสุดโดยค่าเริ่มต้นจะเท่ากับความยาวของสตริง
Return Value
เมธอดนี้ส่งคืนดัชนีล่าสุดหากพบมิฉะนั้นจะเพิ่มข้อยกเว้นหากไม่พบ str
ตัวอย่างตัวอย่าง
ต่อไปนี้แสดงให้เห็นถึงการใช้วิธีการ rindex ()
การสาธิตสด
str1 = "this is string example....wow!!!";
str2 = "is";
print str1.rindex(str2)
print str1.index(str2)
เมื่อเรารันโปรแกรมดังกล่าวข้างต้นก็จะสร้างผลลัพธ์ดังต่อไปนี้ -
5
2
str
เป็นชื่อตัวแปร ชื่อตัวแปรอื่นที่ผู้คนควรหลีกเลี่ยงในไพ ธ อนคือabc
; มีโมดูลที่เรียกว่าabc
ใน Native API