[英]Python 3.6 Create mapping from an array with sizes
任务
我有一个大小的数组
sizes = [5, 3, 1, 2]
并根据我想创建以下数组的大小
mapping = [0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]
解决方案
我的第一次尝试
mapping = []
ctr = 0
for i in range(len(sizes)):
for j in range(sizes[i]):
mapping.append(i)
ctr += 1
较短的版本
mapping = [[i for _ in range(sizes[i])] for i in range(len(sizes))]
mapping = list(itertools.chain(*mapping))
题
单行版?
是否可以在一行中用简洁的代码完成?
使用enumerate
前任:
sizes = [5, 3, 1, 2]
result = [i for i, v in enumerate(sizes) for _ in range(v)]
print(result)
输出:
[0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]
另一种方法是将索引乘以子列表[[0, 0, 0, 0, 0], [1, 1, 1], [2], [3, 3]]
然后用itertoo.chain.from_iterable
将结果展平itertoo.chain.from_iterable
:
>>> from itertools import chain
>>> sizes = [5, 3, 1, 2]
>>> list(chain.from_iterable([i] * x for i, x in enumerate(sizes)))
[0, 0, 0, 0, 0, 1, 1, 1, 2, 3, 3]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.