Dalam Python 2.6 atau yang lebih baru:
Jika Anda ingin StopIterationdinaikkan jika tidak ada elemen yang cocok ditemukan:
next(x for x in the_iterable if x > 3)
Jika Anda ingin default_value(misalnya None) dikembalikan:
next((x for x in the_iterable if x > 3), default_value)
Perhatikan bahwa Anda memerlukan sepasang tanda kurung tambahan di sekitar ekspresi generator dalam kasus ini - mereka diperlukan setiap kali ekspresi generator bukan satu-satunya argumen.
Saya melihat sebagian besar jawaban dengan tegas mengabaikan nextbuilt-in dan jadi saya berasumsi bahwa untuk beberapa alasan misterius mereka 100% fokus pada versi 2.5 dan yang lebih tua - tanpa menyebutkan masalah versi Python (tapi kemudian saya tidak melihat bahwa menyebutkan dalam jawaban yang melakukan menyebutkan nextbuilt-in, yang mengapa saya pikir itu diperlukan untuk memberikan jawaban sendiri - setidaknya "versi yang benar" masalah mendapat catatan cara ini ;-).
Dalam 2.5, .next()metode iterator segera naik StopIterationjika iterator segera selesai - yaitu, untuk kasus penggunaan Anda, jika tidak ada item di iterable yang memenuhi syarat. Jika Anda tidak peduli (yaitu, Anda tahu harus ada setidaknya satu item yang memuaskan) maka gunakan saja .next()(terbaik pada genexp, baris untuk nextbuilt-in di Python 2.6 dan lebih baik).
Jika Anda benar- benar peduli, membungkus hal-hal dalam suatu fungsi seperti yang pertama kali Anda tunjukkan dalam Q Anda tampaknya terbaik, dan sementara implementasi fungsi yang Anda usulkan baik-baik saja, Anda bisa menggunakan itertools, for...: breakloop, atau genexp, atau try/except StopIterationsebagai tubuh fungsi sebagai alternatif . , seperti yang disarankan berbagai jawaban. Tidak ada banyak nilai tambah di salah satu alternatif ini jadi saya akan pergi untuk versi sederhana-sederhana yang pertama kali Anda usulkan.