私はpython list_a
との2つのリストを持っていますlist_b
。list_a
一部の画像リンクを持っており、list_b
あまりにも。アイテムの99%は同じですが、私はこれを1%知っている必要があります。すべての余剰アイテムはにあります。list_a
つまり、内のすべてのアイテムlist_b
はにありlist_a
ます。私の最初のアイデアはlist_a - list_b = list_c
、すべてのアイテムを差し引くことlist_c
です。私のコードは:
list_a = []
list_b = []
list_c = []
arq_b = open('list_b.txt','r')
for b in arq_b:
list_b.append(b)
arq_a = open('list_a.txt','r')
for a in arq_a:
if a not in arq_b:
list_c.append(a)
arq_c = open('list_c.txt','w')
for c in list_c:
arq_c.write(c)
ロジックは正しいと思います。アイテムがある場合、コードは高速に実行されます。しかし、私は10アイテム、または1.000、または100.000さえ持っていません。私が持っている78.514.022
私の中のアイテムlist_b.txt
と78.616.777
私のリストではlist_a.txt
。この表現のコストがわかりませんif a not in arq_b
。しかし、このコードを実行すると、今年は終了しないと思います。
私のPCには8GBがあり、RAMを爆発させないようにスワップに15GBを割り当てています。
私の質問は、この操作をより効率的にする別の方法があります(高速)?
list_a
縦ですが、list_b
ありません。images/00000cd9fc6ae2fe9ec4bbdb2bf27318f2babc00.png
最初のファイルのコンテンツのセットを1つ作成してから、単に使用するdifference
かsymmetric_difference
、違いと呼ぶものに応じて
with open("list_a.txt") as f:
set_a = set(f)
with open("list_b.txt") as f:
diffs = set_a.difference(f)
場合は、list_b.txt
より多くの項目が含まれlist_a.txt
ますが、それらを交換または使用したいset_a.symmetric_difference(f)
何が必要に応じて、代わりに。
difference(f)
機能しますが、set
内部で新しいものを構築する必要があります。パフォーマンスはそれほど向上しませんが(引数の型に応じたset issubsetのパフォーマンスの違いを参照)、それよりも短くなります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加