Python如何将不同子列表按指定次数重复后生成目标嵌套列表
Python列表按指定次数重复拼接解决方案
问题说明
现有待重复子列表及对应重复次数:
- [0, 1] 重复3次
- [1, 3] 重复2次
- [2, 5] 重复4次
原写法[[[0,1]]*3,[[1,3]]*2,[[2,5]]*4]会将每个重复后的子列表组单独作为外层列表的元素,因此多了一层嵌套,以下是两种可得到目标结果的方案:
方案1:直接生成目标列表(无需后续扁平化)
使用两层列表推导式直接拼接所有重复后的子列表,代码如下:
source_lists = [[0,1], [1,3], [2,5]] repeat_counts = [3, 2, 4] # 写法1:按次数循环返回对应子列表 target = [sub_list for sub_list, cnt in zip(source_lists, repeat_counts) for _ in range(cnt)] # 写法2:先重复再展开,效果一致 # target = [item for sub_list, cnt in zip(source_lists, repeat_counts) for item in [sub_list]*cnt] print(target) # 输出:[[0, 1], [0, 1], [0, 1], [1, 3], [1, 3], [2, 5], [2, 5], [2, 5], [2, 5]]
方案2:对现有嵌套结果仅降一层扁平化
如果已经生成了多一层嵌套的结果,可以用以下两种方法快速仅降一层:
方法1:列表推导式(最常用,无需导入依赖)
nested_result = [[[0,1],[0,1],[0,1]],[[1,3],[1,3]],[[2,5],[2,5],[2,5],[2,5]]] flat_result = [item for sub_group in nested_result for item in sub_group] print(flat_result) # 输出和目标一致
方法2:使用itertools.chain
import itertools nested_result = [[[0,1],[0,1],[0,1]],[[1,3],[1,3]],[[2,5],[2,5],[2,5],[2,5]]] flat_result = list(itertools.chain.from_iterable(nested_result)) print(flat_result) # 输出和目标一致
内容的提问来源于stack exchange,提问作者Vikram
相关产品推荐
相关产品推荐

