繁体   English   中英

Python 3.6 从具有大小的数组创建映射

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM