如何列出一个整数在另一个列表中出现的次数



我写了一些代码(Python(,用来打印用素数表示的数字。这是我的代码:

n = 24
lst=[]
i = 2
while n>1:
if n%i==0:
lst.append(i)
n=n/i
i-=1
i+=1  
print(lst)

例如,当我的n24时,列表的输出是[2,2,2,3],因为2*2*2*3=24。现在我想列出一个数字在我的列表中出现的次数。因此,对于这个例子,我希望我的输出是:[3,1],因为2在我的列表中出现3次,en 3在我的名单中出现1次。我不知道该怎么做。当我使用函数count((时,它会打印[3,3,3,1],因为它会检查另一个列表,并检查其中每个项目的存在频率,第二个和第三个项目也是如此,与第一个项目相同。有人知道我的代码必须是什么样子才能输出[3,1]吗?

标准库中有一种称为Counter的数据类型。给定一个可迭代的输入,它将输出一个{ value: count of value }对的字典。您可以按如下方式使用它(输出来自ipython REPL(:

In [1]: from collections import Counter
In [2]: primes = [2,2,2,3]
In [3]: counts = Counter(primes)
In [4]: counts
Out[4]: Counter({2: 3, 3: 1})
In [5]: counts.values()
Out[5]: dict_values([3, 1])
In [6]: list(counts.values())
Out[6]: [3, 1]

为了便于说明,让我们还使用defaultdict:手动构造它

In [7]: from collections import defaultdict
In [8]: counts = defaultdict(int)
In [9]: for p in primes:
...:     counts[p] += 1
...:
In [10]: counts
Out[10]: defaultdict(int, {2: 3, 3: 1})
In [11]: counts.values()
Out[11]: dict_values([3, 1])
In [12]: list(counts.values())
Out[12]: [3, 1]

使用collections.Counter

from collections import Counter
lst = [2,2,2,3]
c = Counter(lst) # Counter({2: 3, 3: 1})

获取值的计数:

c[2]  # count of 2 is 3

最新更新