Tôi nghĩ lý do không có phương pháp 'tìm' và 'chỉ mục' riêng biệt là chúng không đủ khác nhau. Cả hai sẽ trả về cùng một điều trong trường hợp mục tìm kiếm tồn tại trong danh sách (điều này đúng với hai phương thức chuỗi); chúng khác nhau trong trường hợp mục tìm kiếm không có trong danh sách/chuỗi; tuy nhiên bạn có thể xây dựng một trong hai cách tìm kiếm hoặc chỉ mục từ cái kia. Nếu bạn đến từ các ngôn ngữ khác, có vẻ như cách cư xử tồi tệ để nâng cao và bắt ngoại lệ cho một điều kiện không phải lỗi mà bạn có thể dễ dàng kiểm tra, nhưng trong Python, nó thường được coi là pythonic hơn để quay đầu tiên và đặt câu hỏi sau, er , để sử dụng xử lý ngoại lệ thay vì các thử nghiệm như thế này (ví dụ: Better to 'try' something and catch the exception or test if its possible first to avoid an exception?).
Tôi không nghĩ đó là một ý tưởng tốt để xây dựng 'tìm' ra khỏi 'index' và 'trong', như
if foo in my_list:
foo_index = my_list.index(foo)
else:
foo_index = -1 # or do whatever else you want
vì cả trong và chỉ số sẽ đòi hỏi một O (n) vượt qua danh sách.
Tốt hơn để xây dựng 'tìm' ra khỏi 'index' và try/catch, như:
try:
foo_index = my_list.index(foo)
catch ValueError:
foo_index = -1 # or do whatever else you want
Bây giờ, là tại sao danh sách được xây dựng theo cách này (với chỉ số duy nhất), và chuỗi đã được xây dựng cách khác (với chỉ mục riêng biệt và tìm thấy) ... Tôi không thể nói.
Câu hỏi này là về danh sách tương đương với điều này: '" 112131 ".find (" 1213 ") => 1' tức là' [1,1,2,1,3,1] .find ([1,2 , 1,3]) => 1' - Nếu bạn muốn làm điều này * trong thời gian tuyến tính * bạn cần phải thực hiện một trong các thuật toán phù hợp với chuỗi chính mình, mà không phải là dễ dàng. –