基于另一个元素的一个列表中的Python重复元素

鉴于以下列表:

a = [0, 5, 1]
b = [1, 2, 1]

我想用[b]中相应位置的数字重复[a]的每个元素来产生这个:

[0, 5, 5, 1]

即0发生1次,5发生2次,1发生1次.

最佳答案

In [7]: a = [0, 5, 1]

In [8]: b = [1, 2, 1]

In [9]: list(itertools.chain(*(itertools.repeat(elem, n) for elem, n in zip(a, b))))
Out[9]: [0, 5, 5, 1]

In [10]: b = [2, 3, 4]

In [11]: list(itertools.chain(*(itertools.repeat(elem, n) for elem, n in zip(a, b))))
Out[11]: [0, 0, 5, 5, 5, 1, 1, 1, 1]

这里的作品如下:

> itertools.repeat(elem,n) – 重复elem n次
> zip(a,b)列出两个列表中的2元组列表,将每个元素与另一个列表中的相应元素配对.这将为您提供在您的用例中传递给itertools.repeat的确切内容.
> itertools.chain – 将生成的迭代器列表展平为单个值列表.您可以像我一样链接(* iterable)或像Martijn Peters那样链接.from_iterable(可迭代).

点赞