You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表中多集合的并集计算:能否用集合推导式简化代码?

如何用集合推导式简化多集合合并的代码?

现有代码:

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:37:14