用另一个列表中的 n 次重复列表中的元素 n 次

Repeat elements in a list n times with n from another list

也许之前有人问过这个问题,在这种情况下我会删除这个问题,但我有两个列表:

occurence_list = [1, 2, 3, 4, 5]
value_list = [10, 20, 30, 40, 50]

并且我希望每个值出现的次数与另一个列表中相同索引的值的出现次数相同:

result = [10, 20, 20, 30, 30, 30, 40, 40, 40, 40, 50, 50, 50, 50, 50]

如何做到这一点?

使用itertools.repeat()chain():

In [6]: from itertools import repeat, chain

In [7]: list(chain.from_iterable(repeat(i, j) for i, j in zip(value_list, occurence_list)))
Out[7]: [10, 20, 20, 30, 30, 30, 40, 40, 40, 40, 50, 50, 50, 50, 50]

除了通过 chain.from_iterable 连接重复对象然后将结果转换为列表之外,您还可以使用嵌套列表理解:

In [12]: [t for i, j in zip(value_list, occurence_list) for t in repeat(i, j)]
Out[12]: [10, 20, 20, 30, 30, 30, 40, 40, 40, 40, 50, 50, 50, 50, 50]

使用list comprehension,

In [7]: [j for i,j in enumerate(value_list) for _ in range(occurence_list[i])]

Out[7]: [10, 20, 20, 30, 30, 30, 40, 40, 40, 40, 50, 50, 50, 50, 50]