将 python 列表转换为 [[index] * value ] 扁平化

Transform a python list to [[index] * value ] flattened

我有一个列表,想要将列表转换为 [[index] * value] 扁平化。

例如,如果输入是 [1, 2, 3, 1],输出应该是 [0, 1, 1, 2, 2, 2, 3]。我可以想象做以下事情。

A = [1, 2, 3, 1]
result = []
for i,n in enumerate(A):
    result += [i] * n

result就是我想要的输出。但如您所见,解决方案并不是很优雅。如何做得更好?

您可以使用嵌套列表理解:

lst = [1, 2, 3, 1]

output = [i for i, x in enumerate(lst) for _ in range(x)]
print(output) # [0, 1, 1, 2, 2, 2, 3]

使用 itertools 函数的一些方法,尽管我认为您的循环非常好,如果 j1-lee 的循环还没有,我可能已经写好了。

from itertools import chain, repeat, count, starmap

result = [*chain(*map(repeat, count(), A))]
result = list(chain.from_iterable(map(repeat, count(), A)))
result = list(chain.from_iterable(starmap(repeat, enumerate(A))))