1

2 つの非常に大きなリストがあります。1 つは 331991 要素の長さで、1 つは a と呼び、もう 1 つは 99171 要素の長さで、b と呼びます。a と b を比較して、b にない a の要素のリストを返したいとします。これも可能な限り効率的である必要があり、それらが表示される順序で、それはおそらく当然のことですが、そこに入れてもいいと思いました。

4

3 に答える 3

8

O(m + n) 時間で実行できます。ここで、m と n は 2 つのリストの長さに対応します。

exclude = set(b)  # O(m)

new_list = [x for x in a if x not in exclude]  # O(n)

ここで重要なのは、セットには一定時間の封じ込めテストがあるということです。おそらく、最初からセットであると考えることができますb

参照:リスト内包表記


あなたの例を使用して:

>>> a = ['a','b','c','d','e']
>>> b = ['a','b','c','f','g']
>>> 
>>> exclude = set(b)
>>> new_list = [x for x in a if x not in exclude]
>>> 
>>> new_list
['d', 'e']
于 2013-10-09T21:59:18.130 に答える