Python 3.4集合交集

Python 3.4集合交集,python,python-3.x,set-intersection,Python,Python 3.x,Set Intersection,我试图理解为什么我的交集在运行此代码时不返回空列表 n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45]) w = set(n[0]).intersection(*n[:1]) print(w) #Returns (1,2,3,4,5) 但是,这将返回正确的集合 n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45]) w = s

我试图理解为什么我的交集在运行此代码时不返回空列表

n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45])
w = set(n[0]).intersection(*n[:1])
print(w)
#Returns (1,2,3,4,5)
但是,这将返回正确的集合

n = ([1,2,3,4,5],[3,4,5,6],[5,6,7],[7,8,9,10,11,12],[10,22,33,44,45])
w = set(n[0]).intersection(*n)
print(w)
#Returns empty set.
该问题给出了以下两个方面的正确结果:

为什么在将第一个集合与其余列表进行比较时无法得到正确的结果?

*n[:1]解包为n[0],-集合的第一个元素

所以你将n[0]与其自身相交,结果就是你所看到的。你可能打算写

set(n[0]).intersection(*n[1:])

就这样。我不敢相信我犯了那个错误。谢谢。set.intersection*mapset,n将是一种更节省内存的方法来完成您想要的操作。Padraic。我没有查看内存,但您的方法大约慢了30%。每100000次搜索需要1.5到1.7秒,而我尝试的搜索需要0.9到1.0秒。是的,这就是为什么我说内存效率更高,并不总是能够复制数据,所以有时候内存比速度更重要。