目前我很难找到三套的交集。现在这些集合实际上是我要转换成集合的列表,然后尝试找到。
的交集这是我到目前为止所拥有的:
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
仍然没有给我我正在寻找的东西:这是我确保在每个列表中的一个匹配。它给了我看起来像是所有套装的补充。
答案 0 :(得分:17)
我认为你只是在寻找:
set(thingList1) & set(thingList2) & set(thingList3)
&符号是Python(以及其他一些语言)的交集。
答案 1 :(得分:4)
set1 & set2 & set3
应该有效...至少我认为
>>> set((1,2,3)) & set((2,3,4)) & set((3,4,5))
set([3])
答案 2 :(得分:2)
你需要这样的东西:
frozenset(list1) & frozenset(list2) & frozenset(list1)
答案 3 :(得分:2)
这应该可以解决问题:
reduce(lambda x,y: x&y, mysetlist)
答案 4 :(得分:1)
你说的套装清单?
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])
答案 5 :(得分:1)
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
在你做三个清单之前,确保它们包含你期望的结果。