วิธีค้นหาดัชนีของตัวอักษรถัดไปที่คล้ายกันในสตริง [ซ้ำกัน]

a = "programming in python is Fun"

a.find("i") = 8

มันจะส่งคืนดัชนีของการเกิดขึ้นครั้งแรกของ "i" ใน a.
เป็นไปได้หรือไม่ที่จะค้นหาดัชนีของ "i" ที่สอง?


person sunit patil    schedule 03.02.2021    source แหล่งที่มา
comment
ใช่ ดูพฤติกรรมของวิธีดัชนี docs.python.org/3/library/   -  person lllrnr101    schedule 03.02.2021


คำตอบ (3)


find() รับดัชนีเริ่มต้นเพิ่มเติมซึ่งคุณสามารถใช้เป็น:

a = "programming in python is Fun"
first = a.find('i')
print(a.find('i',first+1))
person Krishna Chaurasia    schedule 03.02.2021

คุณสามารถใช้ enumerate() กับ list comprehension เพื่อค้นหาดัชนีทั้งหมดเป็น:

s = "programming in python is Fun"
my_char = "i"

my_indexes = [i for i, x in enumerate(s) if x == my_char]
# where `my_indexes` holds:
#    [8, 12, 22]

ที่นี่ my_char คืออักขระที่คุณต้องการค้นหาดัชนี และ my_indexes คือรายการที่มีดัชนีของแต่ละครั้งที่พบ my_char ในสตริง โปรดดูรายละเอียดเพิ่มเติมใน enumerate() เอกสาร

ดังนั้นคุณสามารถเข้าถึงดัชนีการเกิดครั้งที่สองได้ดังนี้:

>>> my_indexes[1]
12
person Anonymous    schedule 03.02.2021
comment
อันนั้นเจ๋งมาก อาจจะไม่เร็วเท่ากับ .find() บนกระดาษ แต่อัลโกก็ดีกว่านะ ถ้าฉันทำได้ ให้ลบ , x in enumerate, ì for i in s ออกก็ไม่เป็นไร สตริงเป็นเพียงรายการตัวอักษร - person Loïc; 03.02.2021

คุณยังสามารถใช้ numpy ได้ด้วยวิธีต่อไปนี้:

import numpy as np
a = "programming in python is Fun"
x = np.frombuffer(a.encode(), dtype=np.uint8)
np.where(x == ord('i')) # (array([ 8, 12, 22]),)

การใช้ np.frombuffer ตีความ str ใหม่เป็นบัฟเฟอร์ถ่าน จากนั้นใช้ < a href="https://numpy.org/doc/stable/reference/generated/numpy.where.html" rel="nofollow noreferrer">np.where จะส่งคืนดัชนีทั้งหมดที่จะตรงกับตัวละครที่คุณเป็น สนใจ (หรือแม่นยำกว่านั้นคือจำนวนเต็มที่แสดงถึงอักขระ Unicode โดยใช้ ord< /ก>)

person David    schedule 03.02.2021
comment
ไม่โหลดหนักสักหน่อยสำหรับงานนั้นเหรอ? - person Loïc; 03.02.2021
comment
@ Loïcมันอาจจะเกินกำลัง แต่ถ้าคุณมีสายยาวมากฉันเดาว่านี่จะเร็ว แน่นอนว่าฉันยังต้องการเสนอแนวทางอื่นให้กับแนวทางที่ได้รับด้วย - person David; 03.02.2021