Tôi có mã trông giống như sau:
thing_index = thing_list.index(thing)
otherfunction(thing_list, thing_index)
ok vì vậy nó được đơn giản hóa nhưng bạn có được ý tưởng. Bây giờ thing
có thể không thực sự có trong danh sách, trong trường hợp đó tôi muốn chuyển -1 như thing_index
. Trong các ngôn ngữ khác, đây là những gì bạn mong đợi index()
sẽ trả lại nếu nó không thể tìm thấy phần tử. Trong thực tế, nó ném a ValueError
.
Tôi có thể làm điều này:
try:
thing_index = thing_list.index(thing)
except ValueError:
thing_index = -1
otherfunction(thing_list, thing_index)
Nhưng điều này cảm thấy bẩn, cộng với tôi không biết liệu ValueError
có thể được nâng lên vì một số lý do khác. Tôi đã đưa ra giải pháp sau dựa trên các hàm của trình tạo, nhưng nó có vẻ hơi phức tạp:
thing_index = ( [(i for i in xrange(len(thing_list)) if thing_list[i]==thing)] or [-1] )[0]
Có cách nào sạch hơn để đạt được điều tương tự không? Giả sử danh sách không được sắp xếp.
str.find
phương pháp thực hiện chính xác điều đó: trả về -1
khi không tìm thấy kim trong đối tượng.
str.index()
không ném một ngoại lệ nếu chuỗi tìm kiếm không được tìm thấy.
thing_index
." - Đây chắc chắn không phải là Pythonic. Việc chuyển một giá trị mã thông báo (vô nghĩa) trong trường hợp một hoạt động không thành công là điều đáng lo ngại - các ngoại lệ thực sự là cách phù hợp ở đây. Đặc biệt từthing_list[-1]
là một biểu thức hợp lệ, có nghĩa là mục nhập cuối cùng trong danh sách.