想象一下如下列表:
SuperList = [[[1,2,3],[1,2,4]],[[6,3,1],[9,0,4]]]
如您所见,我在子列表中有一个子列表。 我如何编码它找到这些子列表的交集。 在这种情况下,答案是1,3和4。 我的目标是将每个子列表中至少出现一次的所有元素附加到一个新列表中(如果它出现在一个子列表的所有子列表中都无关紧要)
我尝试使用set.intersection,但我不断得到
'unhashable type: 'list''
或者在尝试展开列表时我得到了
'can't use the starred expression here'!
答案 0 :(得分:0)
从你的问题中不清楚你究竟想要做什么,但是如果你想在中尝试测试存在元素(例如1
)在子列表中,您可以先展平“超级列表”,然后从该列表中创建一个集合。
我们可以使用flatset()
:
def flatset(lst):
try:
return set(lst)
except TypeError:
s = set()
for item in lst:
s.update(flatset(item))
return s
例如:
>>> superlist = [[[1,2,3],[1,2,4]],[[6,3,1],[9,0,4]]]
>>> flatset(superlist)
set([0, 1, 2, 3, 4, 6, 9])
>>> 1 in flatset(superlist)
True
答案 1 :(得分:0)
您可以展平子列表并使用set.intersection
:
>>> set.intersection(*[{x for lst in sub for x in lst} for sub in SuperList])
set([1, 3, 4])