リスト内の、ある値に等しい属性(任意の条件を満たす)を持つオブジェクトを検索する 質問する

リスト内の、ある値に等しい属性(任意の条件を満たす)を持つオブジェクトを検索する 質問する

オブジェクトのリストがあります。このリスト内で、属性 (またはメソッドの結果など) が に等しい 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

ループから外れない場合は、これが割り当てられますNonexbreak

おすすめ記事