鉴于以下列表:
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(可迭代).