如何更优雅地实现Python列表转换为[[index]*value]的扁平化输出
Python列表下标按元素值重复输出的优雅实现
你可以直接用嵌套列表推导式实现,无需额外依赖,写法简洁同时保持了较好的可读性:
A = [1, 2, 3, 1] result = [i for i, n in enumerate(A) for _ in range(n)]
运行后输出结果和你原有实现完全一致:[0, 1, 1, 2, 2, 2, 3]。
如果需要处理规模很大的列表,追求更高的内存效率,可以使用itertools工具实现,避免生成大量临时小列表:
from itertools import repeat, chain A = [1, 2, 3, 1] result = list(chain.from_iterable(repeat(i, n) for i, n in enumerate(A)))
两种实现的适用场景对比:
- 列表推导式:无额外依赖,写法最简洁,适合中小规模列表的日常场景,是绝大多数情况下的首选
- itertools实现:基于迭代器惰性生成元素,内存占用更低,处理百万级以上元素的超大列表时性能优势更突出
内容的提问来源于stack exchange,提问作者Luke
相关产品推荐
相关产品推荐

