2タプルの別のリストで一致する2タプルを見つける最も簡単な方法は何ですか?
次のコードは非常に非効率に見えます。loc1とloc2は、(x、y)座標のタプルのリストです。
loc3=[]
for loc in loc1:
if loc in loc2:
loc3.append(loc)
ハッシュが鍵だと思いますが、Pythonでそれを行う方法がわかりません。エレガントなコードを教えてください。ありがとう。
2タプルの別のリストで一致する2タプルを見つける最も簡単な方法は何ですか?
次のコードは非常に非効率に見えます。loc1とloc2は、(x、y)座標のタプルのリストです。
loc3=[]
for loc in loc1:
if loc in loc2:
loc3.append(loc)
ハッシュが鍵だと思いますが、Pythonでそれを行う方法がわかりません。エレガントなコードを教えてください。ありがとう。
セットとintersection
:を使用できます
loc3 = set(loc1).intersection(loc2)
これにより、set
順序付けされておらず、重複が含まれない(そして、アイテムがハッシュ可能であることを強制する)が得られます。それが問題である場合は、PhilFrostによる他の回答を参照してください。ただし、順序や重複が不要な場合は、これが大幅に効率的になります。
重複を含めることができるが、(内のloc2
)アイテムのハッシュ可能性を必要とする順序保存ソリューションは次のとおりです。
sloc2 = set(loc2)
loc3 = [ item for item in loc1 if item in sloc2 ] #still O(m)
Pythonでは、aset
は単なるハッシュテーブルです。アイテムがそのセットに含まれているかどうかを確認することは、アイテムの位置がハッシュによって検出されるため、(ほぼ)O(1)操作です。