23

機能があります。matchCondition(a)、整数を取り、TrueまたはFalseを返します。

私は10個の整数のリストを持っています。matchConditionTrueを返したリストの最初のアイテムを(元のリストと同じ順序で)返したい。

可能な限りpythonically。

4

2 に答える 2

55
next(x for x in lst if matchCondition(x)) 

動作するはずStopIterationですが、リスト内のどの要素も一致しない場合は発生します。に2番目の引数を指定することで、これを抑制することができますnext

next((x for x in lst if matchCondition(x)), None)

一致するものがない場合に返されNoneます。

デモ:

>>> next(x for x in range(10) if x == 7)  #This is a silly way to write 7 ...
7
>>> next(x for x in range(10) if x == 11)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration
>>> next((x for x in range(10) if x == 7), None)
7
>>> print next((x for x in range(10) if x == 11), None)
None

最後に、完全を期すために、リスト内で一致するすべてfilterのアイテムが必要な場合は、組み込み関数の目的は次のとおりです。

all_matching = filter(matchCondition,lst)

python2.xでは、これはリストを返しますが、python3.xでは、反復可能なオブジェクトを返します。

于 2013-01-16T19:45:57.373 に答える
5

break次のステートメントを使用します。

for x in lis:
  if matchCondition(x):
     print x
     break            #condition met now break out of the loop

これxで、必要なアイテムが含まれます。

証拠:

>>> for x in xrange(10):
   ....:     if x==5:
   ....:         break
   ....:         

>>> x
>>> 5
于 2013-01-16T19:47:08.447 に答える