Python 2.6 veya daha yenisinde:
StopIterationEşleşen bir öğe bulunmazsa yükseltilmek istiyorsanız :
next(x for x in the_iterable if x > 3)
Bunun yerine default_value(örneğin None) iade edilmesini istiyorsanız :
next((x for x in the_iterable if x > 3), default_value)
Bu durumda jeneratör ifadesi etrafında fazladan bir çift parantez gerektiğini unutmayın - jeneratör ifadesi tek argüman olmadığında bunlara ihtiyaç vardır.
Yanıtların çoğunun nextyerleşik olarak görmezden geldiğini görüyorum ve bu yüzden gizemli bir nedenden dolayı Python sürümü sorunundan bahsetmeden% 100 2.5 ve daha eski sürümlere odaklandıklarını varsayıyorum (ancak daha sonra bu sözü görmüyorum) cevaplar yapmak söznext yerleşik Eğer gerekli bir cevap kendim sağlamak düşünülen, bu yüzden de - "doğru versiyonu" sorunu kaydında bu şekilde ;-) alır en azından.
2.5'te, .next()yineleyici yöntemi hemen yineleyici StopIterationbiterse - yani, kullanım durumunuz için, yinelenebilir bir öğe koşulu karşılamıyorsa hemen yükseltir . Eğer umursamıyorsanız (yani, en az bir tatmin edici öğe olması gerektiğini biliyorsunuz ) o zaman sadece kullanın .next()(bir genexp'de en iyisi, nextPython 2.6'da yerleşik için en iyisi ve daha iyisi).
Eğer varsa bunu öncelikle Q belirtilen olduğu gibi bir işlevde bakım, sarma şeyler iyi görünüyor ve siz teklif edilen fonksiyon uygulaması gayet iken, alternatif olarak kullanabilirsiniz itertools, bir for...: breakdöngü ya da bir genexp ya da bir try/except StopIterationişlevin organı olarak , çeşitli cevaplar önerdiği gibi. Bu alternatiflerin hiçbirinde katma değer yok, bu yüzden ilk önerdiğiniz basit basit versiyona giderdim.