如何将一组集合作为单独的参数传递给函数?

5
我创建了一个集合列表,想将其传递给 set.intersection()。 例如:
List_of_Sets = [{1,2,3},{3,4,5},{5,6,7}]
set.intersection(List_of_Sets)
结果:
TypeError: descriptor 'intersection' requires a 'set' object but received a 'list'
期望输出:
{3,5}
如何将列表中的每个集合作为单独的参数传递给 set.intersection() 函数?

1
请解释您想要实现的操作。{1,2,3} intersect {3,4,5} intersect {5,6,7} 的结果不是 {3,5} 而是 {}... - shx2
1
@mgilson 我不确定有重复,答案是相同的,但问题不同。 - Steinar Lima
@SteinarLima,那么我们是否允许每个解包问题,只要它适用于新函数? - mhlester
@mhlester 我不知道。Meta 可能有一些关于它的讨论。 - Steinar Lima
@SteinarLima -- 我以前见过更少相似度的问题被关闭,但是像往常一样,我的1个关闭票不够。我们仍然需要4个以上的票。这取决于社区的决定。 - mgilson
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
7

使用解包运算符:set.intersection(*List_of_Sets)


正如其他答案中所指出的,列表中没有交集。您是否想计算相邻元素交集的并集?

>>> set.union(*[x & y for x, y in zip(List_of_Sets, List_of_Sets[1:])])
set([3, 5])

或者,如果您真的喜欢mapset.union(*map(operator.__and__,*zip(List_of_Sets, List_of_Sets[1:]))) - mgilson

2
>>> List_of_Sets = [{1,2,3},{3,4,5},{5,6,7}]
>>> set.intersection(*List_of_Sets)  # * unpacks list into arguments
set([])

在该集合中不存在交集,因此返回一个空集合。以下是一个可行的示例:

>>> List_of_Sets2 = [{1,2,3},{3,4,5},{5,6,3}]
>>> set.intersection(*List_of_Sets2)  # * unpacks list into arguments
set([3])

使用*解包的相关文档

(注:此处为原文链接,无需翻译)

“关于“没有交叉点”的观点很好。” - mgilson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,