为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

汪汪一只猫 2021-06-02 22:29:32
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]我们如何创建一个新列表,该列表从一个列表中多次添加依赖于另一个列表的项目?
查看完整描述

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]


查看完整回答
反对 回复 2021-06-06
?
幕布斯6054654

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]


查看完整回答
反对 回复 2021-06-06
  • 3 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信