在 Python 中使用频率列表创建列表

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]

我们如何创建一个新列表,该列表从一个列表中多次添加依赖于另一个列表的项目?


汪汪一只猫
浏览 186回答 3
3回答

江户川乱折腾

使用列表理解: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 220 121 122 323 224 125 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]

幕布斯6054654

这是使用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]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python