如何使用 python 中的列表解析计算列表中元素出现的次数?

How to compute the number of occurencies of elements in a list using list comprehensions in 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 的出现次数。

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

N.B:如果可能,必须使用列表理解。

嗯,原因是当你这样做时

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) 三次,然后 arr.count(3) 两次。

因此,为了不重复数字,您需要做的是计算列表中唯一的数字,即 1、2 和 3。 所以正确的代码是:

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

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