我有一个硬币数组,例如(coins=[10, 50, 100]) 和每个硬币数量的数组(例如 quantity=[1, 2, 1])。我想生成一个新列表 l,它显示我拥有的所有硬币(例如 l=[10, 50, 50, 100])。
到目前为止,我有这个,它可以解决问题:
coins=[i for s in [b*[a] for a,b in zip(coins,quantity)] for i in s]
在 python 中有没有比创建列表列表然后展平它更好的方法来解决这个问题?
请您参考如下方法:
您可以利用 itertools 链并重复:
from itertools import repeat,chain
coins=[10, 50, 100]
quantity=[1, 2, 1]
result = list(chain.from_iterable(map(repeat, coins, quantity))) # thx @ miradulo
print(result)
输出:
[10, 50, 50, 100]
优点:它不会构建内部列表然后将其展平,而是将值生成为可迭代对象。
