これを行う最善の方法は、データを読み取り、アイテムのセットとA
アイテムのセットを構築することB
です。次に、2つの交差点を見つけるだけです。
唯一の潜在的な欠点は、一度にすべてのデータをメモリに収める必要があることです。大規模なデータセットを考えると、これは問題になる可能性があります。半分を処理できる場合は、アイテムのセットを作成し、セットA
に対してB
チェックするアイテムを処理できます。
例:
入力データの使用:
A=good
B=c++
A=df
B=kj
A=c++
B=programming language
最初の方法は、次のように簡単に実行できます。
a = set()
b = set()
with open("test") as data:
for line in data:
line_data = line[2:].strip()
if line.startswith("A"):
a.add(line_data)
else:
b.add(line_data)
print(a & b)
私たちに与えること:
{'c++'}
2 番目の方法は次のように実行できます。
with open("test") as data:
a = {line[2:].strip() for line in data if line.startswith("A")}
with open("test") as data:
results = {item for item in (line[2:].strip() for line in data if line.startswith("B")) if item in a}
print(results)
これは同じ結果をもたらしますが、データの半分をメモリに格納するだけで (データの重複が大きい場合はそれ以下)、セット ルックアップの効率的な性質によりさらに効率的です。