<分区>
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
我们如何创建一个新列表,根据另一个列表多次添加一个列表中的项目?
谢谢
标签 python python-3.x
<分区>
age = [19, 20, 21, 22, 23, 24, 25]
frequency = [2, 1, 1, 3, 2, 1, 1]
output_age = [19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
我们如何创建一个新列表,根据另一个列表多次添加一个列表中的项目?
谢谢
最佳答案
使用列表理解:
output_age = [i for l in ([a]*f for a, f in zip(age, frequency)) for i in l]
#[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
为什么?
我们首先将 zip
age
和 frequency
列表放在一起,以便我们可以一致地迭代它们。这样:
for a, f in zip(age, frequency):
print(a, f)
给出:
19 2
20 1
21 1
22 3
23 2
24 1
25 1
然后我们要重复每个元素,a
,根据f
确定的次数。这可以通过创建一个列表并将其相乘来完成。就像:
[4] * 3
#[4, 4, 4]
然后我们需要解压缩这些值,以便我们将这个表达式包装在一个生成器中(用括号表示)并对其进行迭代。这使列表变平。注意这里有 alternative ways实现这一点(例如使用 itertools.chain.from_iterable
)。
另一种方法是通过遍历 range
对象而不是乘以列表来重复数字 a
。
这个方法看起来像这样:
output_age = [a for a, f in zip(age, frequency) for _ in range(f)]
#[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
关于python - 在 Python 中使用频率列表创建列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52075570/