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
相关产品推荐
相关产品推荐

