私はpythonで遊んでいて、2つのリストの共通部分を取得できます。
result = set(a).intersection(b)
d
がa
とb
および3番目の要素c
を含むリストである場合、すべての交点を見つけるための組み込み関数がありますd
内の3つのリストたとえば、
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
結果は次のようになります
[3,4]
2.4では、交差関数を定義するだけです。
def intersect(*d):
sets = iter(map(set, d))
result = sets.next()
for s in sets:
result = result.intersection(s)
return result
pythonの新しいバージョンの場合:
交差法は任意の量の引数を取ります
result = set(d[0]).intersection(*d[:1])
または、最初のセットをそれ自体と交差させて、リストのスライスとコピーの作成を回避できます。
result = set(d[0]).intersection(*d)
pythonに組み込みのチェックがある場合を除き、どちらがより効率的で、d[0]
のサイズとリストのサイズに依存するのかという感覚を実際に持っているのように
if s1 is s2:
return s1
交差法で。
>>> d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
>>> set(d[0]).intersection(*d)
set([3, 4])
>>> set(d[0]).intersection(*d[1:])
set([3, 4])
>>>
set.intersection(*map(set,d))
@ user3917838
素晴らしくシンプルですが、それを機能させるためにキャストが必要であり、結果としてリストを提供します。次のようになります。
list(reduce(set.intersection, [set(item) for item in d ]))
どこ:
d = [[1,2,3,4], [2,3,4], [3,4,5,6,7]]
結果は次のとおりです。
[3, 4]
少なくともPython 3.4
ラムダ削減。
from functools import reduce #you won't need this in Python 2
l=[[1, 2, 3, 4], [2, 3, 4], [3, 4, 5, 6, 7]]
reduce(set.intersection, [set(l_) for l_ in l])