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

Python如何仅用一个for循环合并三个列表推导式

单循环实现列表分组筛选的解决方案
  • 该需求可正常实现,你遇到的报错是解包变量数量不匹配导致的,和需求本身无关。

报错原因说明

ValueError: need more than 2 values to unpack报错的触发原因是你在遍历enumerate()返回结果时定义了超过2个的解包变量。enumerate(可迭代对象)每次迭代只会返回(索引, 对应元素)两个值,只要保证解包变量为2个即可避免该报错。

正确实现代码

分支判断版(可读性高)

# 生成1到31的原始列表
origin_list = list(range(1, 32))
x, y, z = [], [], []

for idx, num in enumerate(origin_list):
    mod_val = idx % 10
    if mod_val == 0:
        x.append(num)
    elif mod_val == 4:
        y.append(num)
    elif mod_val == 9:
        z.append(num)

result = [x, y, z]
# 输出result即可得到[[1, 11, 21], [5, 15, 25], [10, 20, 30]]

映射优化版(适合筛选规则较多的场景)

origin_list = list(range(1, 32))
res = [[], [], []]
# 建立模值到对应子列表的映射关系
mod_mapping = {0: 0, 4: 1, 9: 2}

for idx, num in enumerate(origin_list):
    mod_val = idx % 10
    if mod_val in mod_mapping:
        res[mod_mapping[mod_val]].append(num)

# res即为目标结果

内容的提问来源于stack exchange,提问作者Redhwan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:06:04