如何使用 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]。
给定一个这样的列表
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]。