7

現在、私は 3 つの集合の交点を見つけようとして立ち往生しています。これらのセットは実際にはリストであり、セットに変換し、その交点を見つけようとしています。

これが私がこれまでに持っているものです:

for list1 in masterlist:
    list1 = thingList1
for list2 in masterlist:
    list2 = thingList2
for list3 in masterlist:
    list3 = thingList3

d3 = [set(thingList1), set(thingList2), set(thingList3)] 
setmatches c = set.intersection(*map(set,d3)) 
print setmatches

そして私は得ています

set([]) 
Script terminated.

これを行うためのはるかに簡単で優れた方法があることは知っていますが、見つけることができません...

編集

さて、これが私が今持っているものです。

setList=()
setList2=()
setList3=()

for list1 in masterlist:
    setList=list1
    for list2 in masterlist:
        setList2=list2
        for list3 in masterlist:
            setList3=list3



setmatches=set(setList) & set(setList2) & set(setList3)
print setmatches

私が探しているものはまだ得られません。これは、各リストにあることを確認した 1 つの一致です。それは私にすべてのセットの追加のように見えるものを与えています.

4

6 に答える 6

30

私はあなたが単に探していると思います:

set(thingList1) & set(thingList2) & set(thingList3)

アンパサンドは、Python (および他のいくつかの言語も同様) の交差です。

于 2012-10-08T21:38:25.230 に答える
4
set1 & set2 & set3

動作するはずです...少なくとも私は思います

>>> set((1,2,3)) & set((2,3,4)) & set((3,4,5))
set([3])
于 2012-10-08T21:37:40.973 に答える
3
set.intersection(*map(set,d3)) 

実際には機能しますが、すでにセットが含まれているため、d3のことができます。

set.intersection(*d3)

そして、実際には、最初のものだけが必要ですset-他のものは任意の反復可能であり、intersectionそれ自体でそれらを設定します。

あなたが抱えている問題はこのコードにはないようです-むしろ、

for list1 in masterlist:
    list1 = thingList1

実際には何も入れませんthingList1。どのように見えるかを見ずに見分けるのは難しいmasterlistですが、次のようなものが必要な場合があります。

for list1 in masterlist:
   thingList1[:] = list1

print交差点を実行する前に3つのリストを作成して、期待どおりのリストが含まれていることを確認します。

于 2012-10-08T21:50:19.443 に答える
2

セットのリストですか?

In [1]: mylist = [ [1, 2, 3, 4], [3, 4, 5, 6, 7], [2, 3, 4, 5, 6] ]

In [2]: result = set(mylist[0])

In [3]: for item in mylist:
   ...:     result = result.intersection(item)
   ...:     
   ...:     

In [4]: result
Out[4]: set([3, 4])
于 2012-10-08T21:41:49.763 に答える
2

次のようなものが必要です。

frozenset(list1) & frozenset(list2) & frozenset(list1)
于 2012-10-08T21:39:01.290 に答える