2

私は2つのリストを持っています:

list1 = [
    set(['3105']),
    set(['3106', '3107']),
    set(['3115']),
    set(['3122']),
    set(['3123', '3126', '286'])
]

list2 = [
    set(['400']),
    set(['3115']),
    set(['3100']),
    set(['3107']),
    set(['3123', '3126'])
]

これらのリストの共通点を比較するにはどうすればよいですか。たとえば、3126 が両方のリストのいずれかのセットのどこかにある場合、別のリストに 3126 を追加します。私の最終目標は、別のリストを追加してから長さを取得することです。リスト間でいくつの一致があるかがわかります。

4

3 に答える 3

1
>>> common_items = set().union(*list1) & set().union(*list2)
>>> common_items
set(['3123', '3115', '3107', '3126'])
>>> '3126' in common_items
True

タイミング比較:

>>> %timeit reduce(set.union, list1) & reduce(set.union, list2)
100000 loops, best of 3: 11.7 us per loop
>>> %timeit set().union(*list1) & set().union(*list2)      #winner
100000 loops, best of 3: 4.63 us per loop
>>> %timeit set(s for x in list1 for s in x) & set(s for x in list2 for s in x)
10000 loops, best of 3: 11.6 us per loop
>>> %timeit import itertools;set(itertools.chain.from_iterable(list1)) & set(itertools.chain.from_iterable(list2))
100000 loops, best of 3: 9.91 us per loop
于 2013-08-06T17:20:01.787 に答える
0

セットの 2 つのリストをセットにフラット化できます。

l1 = set(s for x in list1 for s in x)
l2 = set(s for x in list2 for s in x)

次に、交点を計算できます。

common = l1.intersection(l2)  # common will give common elements
print len(common) # this will give you the number of elements in common.

結果:

>>> print common
set(['3123', '3115', '3107', '3126'])
>>> len(common)
4
于 2013-08-06T17:10:17.800 に答える