3

私はここで複製していないことを願っています:-)

Pythonリストをフィルタリングする最も効果的な方法は何だろうと思います。私が手にしているタスクは、他のリストに表示されていないリスト要素を見つけることです。

私の最初のリストはオブジェクトのリストです(不要な詳細は含まれていません):

Class A:
    def __init__(self,item1, item2):
        self.item1 = item1
        self.item2 = item2

後で、私のスクリプトで、入力テキストファイルを解析し、list1実際のデータを入力しています(フィールドitem1item2フィールドの両方が文字列です)

list2に対応する文字列のリストだけを含む2番目のリストもありますitem1。私が興味を持っているのは、にないlist1場所の要素です。 約3000個の要素が含まれ、より大きく、約60000個の要素が含まれます。)item1list2
list1list2

私の最初の試みは非常に明白です:

notMatched = list(itertools.ifilter(lambda x: x.item1 not in list2), list1))

今では、期待どおりに機能し、私が望むものを正確に提供しますが、それが私が思いついた最善の解決策であるかどうかはまだ疑問です。誰かアイデアはありますか?

ありがとう

4

1 に答える 1

5

セットを作るlist2。これにより、ルックアップのパフォーマンスが向上しますnot in list2

あなたはおそらくこれで逃げることができます:

set2 = set(list2)
not_matched = [a for a in list1 if not a.item1 in set2]
于 2012-06-14T07:31:05.213 に答える