如何根据浮点数值列表与对应出现次数生成重复值组成的新列表
实现方法
方法1:列表推导式(最简洁,适合大部分场景)
直接用双层列表推导式就能实现,代码如下:
values = [10.5, 20.2, 50.0] occ = [3, 5, 1] result = [v for v, count in zip(values, occ) for _ in range(count)] print(result) # 输出:[10.5, 10.5, 10.5, 20.2, 20.2, 20.2, 20.2, 20.2, 50.0]
逻辑很简单:先把两个列表对应位置的数值和次数配对,然后每个数值重复对应次数后插入结果列表即可。
方法2:itertools工具实现(大数据量场景性能更好)
如果你的输入列表长度很大,用itertools的方案内存占用更低,运行效率更高:
from itertools import chain, repeat values = [10.5, 20.2, 50.0] occ = [3, 5, 1] result = list(chain.from_iterable(repeat(v, count) for v, count in zip(values, occ))) print(result)
前置校验建议
如果不能保证两个输入列表完全符合要求,可以先加一步校验避免运行报错:
# 校验两个列表长度一致 assert len(values) == len(occ), "values和occ的长度必须相等" # 校验次数都是非负整数 assert all(isinstance(c, int) and c >= 0 for c in occ), "occ列表的元素必须是非负整数"
内容的提问来源于stack exchange,提问作者D D
相关产品推荐
相关产品推荐

