Python 2.6 veya daha yenisinde:
StopIteration
Eş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 next
yerleş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 StopIteration
biterse - 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, next
Python 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...: break
döngü ya da bir genexp ya da bir try/except StopIteration
iş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.