如何用Python列表推导式生成扁平的二元组列表而非嵌套结构?
解决方案
你可以用双层循环的列表推导式直接生成扁平结构,不需要嵌套:
mylist = [(f'{factor}i_{i}', factor * i) for i in range(1, 4) for factor in (2, 8)]
运行后得到的结果就是你想要的扁平列表:
[('2i_1', 2), ('8i_1', 8), ('2i_2', 4), ('8i_2', 16), ('2i_3', 6), ('8i_3', 24)]
原理说明
这个写法相当于把原来每个i对应的两个二元组拆开来,逐个添加到最终列表里:
- 外层循环遍历
i从1到3 - 内层循环遍历因子
(2,8),每次循环生成一个二元组,直接加入大列表,不会产生嵌套结构
如果你不想重复写逻辑,也可以先定义每个i对应的二元组集合,再用列表推导式展开:
mylist = [item for i in range(1,4) for item in ((f'2i_{i}',2*i), (f'8i_{i}',8*i))]
这个写法和第一种效果一致,只是把每个i对应的两个二元组提前打包成一个元组,再通过内层循环逐个取出。
内容的提问来源于stack exchange,提问作者guskenny83
相关产品推荐
相关产品推荐

