Python 3.6:如何用一行简洁代码实现尺寸数组的映射生成?
一行代码实现映射数组生成
当然有超简洁的一行实现方案!结合Python的内置工具,就能轻松搞定这个需求:
import itertools sizes = [5, 3, 1, 2] mapping = list(itertools.chain.from_iterable([i] * size for i, size in enumerate(sizes)))
代码细节说明:
enumerate(sizes):同时遍历每个尺寸的索引i和对应的长度size,比如第一个迭代项是(0,5),第二个是(1,3),以此类推。[i] * size:生成一个重复size次索引i的小列表,比如[0]*5会得到[0,0,0,0,0]。itertools.chain.from_iterable(...):把所有小列表“平铺”成连续的迭代器,相比直接拼接列表,这种方式更节省内存,尤其适合处理大规模数据。list(...):将迭代器转换为最终的列表格式。
如果不想导入额外模块,也可以用sum实现(注意:数据量较大时效率略低,因为每次求和都会创建新列表):
sizes = [5, 3, 1, 2] mapping = sum(([i] * size for i, size in enumerate(sizes)), [])
两种写法都能生成你需要的[0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3],可以根据场景选择~
内容的提问来源于stack exchange,提问作者Snochacz
相关产品推荐
相关产品推荐

