Làm thế nào tôi có thể tìm thấy sự xuất hiện đầu tiên của chuỗi con trong chuỗi python?


123

Vì vậy, nếu chuỗi của tôi là "anh chàng là một anh chàng lạnh lùng".
Tôi muốn tìm chỉ mục đầu tiên của 'anh chàng':

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

Lệnh python cho điều này là gì?
Cảm ơn.

Câu trả lời:


213

find()

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

20
Nó trả về -1nếu không được tìm thấy
Barshe Roussy

Nếu tôi muốn tìm istừ trong câu this is a cool dudethì sao? Tôi đã thử phương thức find nhưng nó trả về chỉ số 2 thay vì 5. Làm thế nào để tôi đạt được điều này bằng cách sử dụng find ()?
Regressor

@Regressor: nhìn vào ranh giới regex và từ.
Mechanical_meat

27

Tổng quan nhanh: indexfind

Bên cạnh findphương pháp là có index. findindexcả hai mang lại kết quả tương tự: trở về vị trí của sự xuất hiện đầu tiên, nhưng nếu không có gì được tìm thấy indexsẽ nâng cao một ValueErrorkhi findlợi nhuận -1. Tốc độ, cả hai đều có kết quả điểm chuẩn giống nhau.

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

Kiến thức bổ sung: rfindrindex:

Nói chung, find và index trả về chỉ mục nhỏ nhất nơi chuỗi nhập vào bắt đầu rfindrindextrả về chỉ mục lớn nhất nơi nó bắt đầu Hầu hết các thuật toán tìm kiếm chuỗi tìm kiếm từ trái sang phải , vì vậy các hàm bắt đầu bằng rchỉ ra rằng tìm kiếm xảy ra từ phải sang trái .

Vì vậy, trong trường hợp khả năng của yếu tố bạn đang tìm kiếm gần kết thúc hơn là bắt đầu danh sách, rfindhoặc rindexsẽ nhanh hơn.

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

Nguồn: Python: Hướng dẫn khởi động nhanh bằng hình ảnh, Toby Donaldson


nếu chuỗi được định nghĩa là input_string = "this is a sentence"và nếu chúng ta muốn tìm sự xuất hiện đầu tiên của từ isthì nó có hoạt động không? # 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

để thực hiện điều này theo cách thuật toán, bằng cách không sử dụng bất kỳ hàm in sẵn nào của python. Điều này có thể được thực hiện như

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
Có vẻ như vết lõm của bạn bị tắt và bạn quên đóng dấu ngoặc kép. Giải thích về mã của bạn và lý do tại sao nó sẽ giải quyết vấn đề cũng hữu ích; xem Cách trả lời
camille

xin lỗi tôi chỉnh sửa nó ... mã của tôi tìm thấy sự xuất hiện đầu tiên của một lá thư trong chuỗi và trả lại vị trí của anh ấy
Benmadani Yazid
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.