首页 > 解决方案 > 如何使用python中的列表推导计算列表中元素的出现次数?

问题描述

给定一个像这样的列表

arr = [1, 1, 2, 2, 2, 3, 3]

我想计算每个元素的出现次数并将其存储在一个新列表中,但使用这样的列表理解:

occ = [arr.count(e) for e in arr]

但这会打印出原始数据array: [1, 1, 2, 2, 2, 3, 3] ,而不是[2, 3, 2]输入数组中 1、2 和 3 的出现次数。

为什么会发生这种情况以及如何解决?

注意:如果可能,必须使用列表推导。

标签: pythonlist-comprehensioncounting

解决方案


好吧,原因是当你这样做的时候

arr = [1, 1, 2, 2, 2, 3, 3]

和 arr.count(1) ,您将获得列表 arr 中数字 1 的出现次数。然后当你这样做时

occ = [arr.count(e) for e in arr]

您实际上是在计算 arr.count(1) 2 次,然后是 arr.count(3) 3 次,然后是 arr.count(3) 2 次。

所以,为了不重复数字,你必须做的是计算列表中的唯一数字,它们只是 1、2 和 3。所以正确的代码是:

occ = [arr.count(e) for e in set(arr)]

现在,当您打印列表时,您将按预期获得 [2,3,2] 。


推荐阅读