3 回答
TA贡献1851条经验 获得超5个赞
使用列表理解:
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]
然后我们需要解包这些值,以便我们将此表达式包装在生成器中(用括号表示)并对其进行迭代。这会使列表变平。请注意,有其他方法可以实现这一点(例如使用itertools.chain.from_iterable)。
另一种方法是a通过迭代range对象而不是乘以列表来重复数字, 。
这种方法看起来像:
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]
TA贡献1876条经验 获得超7个赞
这是使用zip和的解决方案range
>>> age = [19, 20, 21, 22, 23, 24, 25]
>>> frequency = [2, 1, 1, 3, 2, 1, 1]
>>> [a for a,f in zip(age, frequency) for _ in range(f)]
[19, 19, 20, 21, 22, 22, 22, 23, 23, 24, 25]
添加回答
举报