列表中多集合的并集计算:能否用集合推导式简化代码?
如何用集合推导式简化多集合合并的代码?
现有代码:
s = set() for x in [ {1,2}, {3,4}, {5,1} ]: s |= x执行后得到集合
{1, 2, 3, 4, 5}。请问是否可以使用集合推导式实现该功能?如何简化代码写法?
当然可以用集合推导式实现!而且还有几种更简洁的写法,我给你逐一说明:
1. 集合推导式实现
核心思路是嵌套遍历:先遍历每个子集合,再遍历子集合里的每个元素,把所有元素收集到新集合中,语法如下:
s = {elem for sub_set in [{1,2}, {3,4}, {5,1}] for elem in sub_set}
这和你原来的循环逻辑完全等价,只是把两层循环转换成了更紧凑的推导式写法,最终得到所有子集合的并集。
2. 更直观的写法:set.union()
如果只是单纯合并多个集合的并集,set.union()方法会更简洁直观,尤其是处理不确定数量的集合时:
# 方式1:用空集合union所有子集合(解包列表参数) s = set().union(*[{1,2}, {3,4}, {5,1}]) # 方式2:直接用其中一个集合union其他集合 s = {1,2}.union({3,4}, {5,1})
union()方法本身支持传入多个可迭代对象,用*解包列表可以一次性传入所有子集合,代码非常简洁。
3. 灵活扩展:带条件的集合推导
如果需要在合并时过滤元素,集合推导式的优势就体现出来了。比如只保留大于2的元素:
s = {elem for sub_set in [{1,2}, {3,4}, {5,1}] for elem in sub_set if elem > 2} # 结果:{3,4,5}
这种场景下,推导式比union()更灵活,能直接在合并过程中完成过滤。
内容的提问来源于stack exchange,提问作者hardfork
相关产品推荐
相关产品推荐

