ฉันจะค้นหาสตริงย่อยที่เกิดขึ้นครั้งแรกในสตริง python ได้อย่างไร


123

ดังนั้นถ้าสตริงของฉันคือ "เพื่อนคือเพื่อนที่เท่ห์"
ฉันต้องการค้นหาดัชนีแรกของ 'เพื่อน':

mystring.findfirstindex('dude') # should return 4

คำสั่ง python สำหรับสิ่งนี้คืออะไร?
ขอบคุณ

คำตอบ:


213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4

20
ก็จะส่งกลับ-1ถ้าไม่พบ
Christophe Roussy

จะทำอย่างไรถ้าฉันต้องการค้นหาคำisจากประโยคthis is a cool dude? ฉันลองใช้วิธีการค้นหา แต่มันส่งกลับดัชนี 2 แทนที่จะเป็น 5 ฉันจะบรรลุสิ่งนี้โดยใช้ find () ได้อย่างไร
Regressor

@ Regressor: มองเข้าไปใน regex และขอบเขตของคำ
mechanical_meat

28

ภาพรวมด่วน: indexและfind

ถัดไปไปที่วิธีการที่มีเช่นกันfind และทั้งเกิดผลเหมือนกัน: การกลับมาของตำแหน่งที่เกิดขึ้นครั้งแรกที่แต่ถ้าไม่มีอะไรที่พบจะยกระดับในขณะที่ผลตอบแทน Speedwise ทั้งสองมีผลการเปรียบเทียบที่เหมือนกันindexfindindexindexValueErrorfind-1

s.find(t)    #returns: -1, or index where t starts in s
s.index(t)   #returns: Same as find, but raises ValueError if t is not in s

ความรู้เพิ่มเติม: rfindและrindex:

โดยทั่วไปค้นหาและจัดทำดัชนีจะส่งคืนดัชนีที่เล็กที่สุดที่สตริงที่ส่งผ่านเริ่มต้นrfindและrindexส่งกลับดัชนีที่ใหญ่ที่สุดที่เริ่มต้นอัลกอริทึมการค้นหาสตริงส่วนใหญ่จะค้นหาจากซ้ายไปขวาดังนั้นฟังก์ชันที่ขึ้นต้นด้วยrจะบ่งชี้ว่าการค้นหาเกิดขึ้นจากด้านขวา ไปทางซ้าย

ดังนั้นในกรณีที่ความเป็นไปได้ขององค์ประกอบที่คุณกำลังค้นหาอยู่ใกล้ถึงจุดสิ้นสุดมากกว่าจุดเริ่มต้นของรายการrfindหรือrindexอาจเร็วกว่านั้น

s.rfind(t)   #returns: Same as find, but searched right to left
s.rindex(t)  #returns: Same as index, but searches right to left

ที่มา: Python: Visual QuickStart Guide, Toby Donaldson


ถ้าสตริงถูกกำหนดเป็นinput_string = "this is a sentence"และหากเราต้องการค้นหาคำที่เกิดขึ้นครั้งแรกisมันจะได้ผลหรือไม่? # first occurence of word in a sentence input_string = "this is a sentence" # return the index of the word matching_word = "is" input_string.find("is")
Regressor

1

เพื่อใช้สิ่งนี้ในวิธีอัลกอริทึมโดยไม่ใช้ฟังก์ชัน python inbuilt ใด ๆ สามารถนำไปใช้เป็นไฟล์

def find_pos(string,word):

    for i in range(len(string) - len(word)+1):
        if string[i:i+len(word)] == word:
            return i
    return 'Not Found'

string = "the dude is a cool dude"
word = 'dude1'
print(find_pos(string,word))
# output 4

0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'

6
ดูเหมือนว่าการเยื้องของคุณปิดอยู่และคุณลืมปิดเครื่องหมายคำพูดของคุณ คำอธิบายรหัสของคุณและเหตุใดจึงสามารถแก้ปัญหาได้ก็มีประโยชน์เช่นกัน ดูHow to Answer
camille

ขอโทษฉันแก้ไข ... รหัสของฉันพบการเกิดขึ้นครั้งแรกของตัวอักษรในสตริงและส่งคืนตำแหน่งของเขา
Benmadani Yazid

0

ข้อ = "ถ้าคุณสามารถเก็บหัวของคุณไว้ได้เมื่อทุกอย่างเกี่ยวกับคุณ \ n กำลังสูญเสียพวกเขาและกล่าวโทษคุณ \ n ถ้าคุณสามารถเชื่อใจตัวเองได้เมื่อผู้ชายทุกคนสงสัยคุณ \ n แต่ก็เผื่อความสงสัยไว้ด้วย \ n ถ้าคุณทำได้ รอและอย่าเหนื่อยกับการรอ \ n หรือถูกโกหกอย่าโกหก \ n หรือถูกเกลียดอย่าหลีกทางให้เกลียด \ n และอย่าดูดีเกินไปหรือพูดอย่างฉลาดเกินไป :"

enter code here

print(verse)
#1. What is the length of the string variable verse?
verse_length = len(verse)
print("The length of verse is: {}".format(verse_length))
#2. What is the index of the first occurrence of the word 'and' in verse?
index = verse.find("and")
print("The index of the word 'and' in verse is {}".format(index))

ยินดีต้อนรับสู่ Stack Overflow คุณกำลังตอบคำถามเก่าและตอบไปแล้ว (ตอบด้วยเครื่องหมายถูกสีเขียว) โดยไม่ให้ข้อมูลเพิ่มเติมหรือคำอธิบายที่ดีกว่า ดังนั้นมันจึงเป็นเพียงทำซ้ำคำตอบที่ได้รับการยอมรับ ดูที่ฉันจะเขียนคำตอบที่ดีได้อย่างไร? . (และสำหรับการอ้างอิงเพิ่มเติมโปรดดูที่วิธีจัดการกับการล้างคำตอบที่ซ้ำกันอย่างโจ่งแจ้งในช่วงปลาย ๆ ('ท่อง') สำหรับคำถามยอดนิยม )
Ivo Mori
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.