Tôi đang sử dụng máy phát điện để thực hiện tìm kiếm trong danh sách như ví dụ này đơn giản:Làm thế nào tôi có thể nhận được một trình tạo Python để trả về None chứ không phải StopIteration?
>>> a = [1,2,3,4]
>>> (i for i, v in enumerate(a) if v == 4).next()
3
(Chỉ cần khung ví dụ một chút, tôi đang sử dụng danh sách còn rất nhiều so với một ở trên, và các mục là một phức tạp hơn một chút so với int
. Tôi làm theo cách này để toàn bộ danh sách sẽ không được duyệt qua mỗi khi tôi tìm kiếm chúng)
Bây giờ nếu thay vào đó, hãy đổi thành i == 666
, nó sẽ trả lại StopIteration
vì nó có thể ' t tìm thấy bất kỳ mục nhập 666
nào trong a
.
Làm cách nào để tôi trả lại None
? Tôi có thể tất nhiên quấn nó trong một điều khoản try ... except
, nhưng là có một cách nhiều hơn pythonic để làm điều đó?
Tôi có thể hỏi lý do tại sao bạn đang sử dụng máy phát điện để tìm kiếm những thứ? –
Bạn mong đợi điều gì sẽ xảy ra nếu bạn tìm kiếm thứ gì đó mà bạn đã vượt qua? Tại sao không chỉ sử dụng nhiều hơn 'pythonic' cách như 'if i in a: ...'? –
@Manny D, 'if i in a' không giúp ích nếu bạn muốn lấy chỉ mục của mục tìm thấy. – senderle