オブジェクトのリストがあります。このリスト内で、属性 (またはメソッドの結果など) が に等しい 1 つの (最初の、または任意の) オブジェクトを見つけたいですvalue
。
それを見つける最善の方法は何ですか?
テストケースは次のとおりです。
class Test:
def __init__(self, value):
self.value = value
import random
value = 5
test_list = [Test(random.randint(0,100)) for x in range(1000)]
# that I would do in Pascal, I don't believe it's anywhere near 'Pythonic'
for x in test_list:
if x.value == value:
print "i found it!"
break
reduce()
ジェネレーターを使用しても、リストを反復処理するため、違いはないと思います。
追記: の式はvalue
単なる例です。もちろん、任意の条件を満たす要素を取得したいのです。
ベストアンサー1
next((x for x in test_list if x.value == value), None)
これは、条件に一致するリストから最初の項目を取得し、None
一致する項目がない場合は返します。これは私が好む単一式の形式です。
しかし、
for x in test_list:
if x.value == value:
print("i found it!")
break
単純なループブレーク バージョンは完全に Python 的です。簡潔で、明確で、効率的です。これをワンライナーの動作と一致させるには、次のようにします。
for x in test_list:
if x.value == value:
print("i found it!")
break
else:
x = None
ループから外れない場合は、これが割り当てられますNone
。x
break