如何在Python中打印列表中元素出现的次数?

2 投票
3 回答
937 浏览
提问于 2025-04-18 03:56

我有两个变量,x和y,其中x是一个数字,y是一个数字列表。

我需要定义一个叫做count的函数,这个函数要找出x在y中出现了多少次。

比如,

count(1,[2,1,3,1,4])

这个函数应该返回2,因为数字1在列表中出现了两次。

谢谢大家的建议。

注意:我不能使用内置的计数函数,也就是不能用y.count(x)。

3 个回答

2

为什么不使用循环:

def count_occurences(num, lst):
    return len([i for i in lst if i==num])

    #or return sum(1 for i in lst if i==num)

>>> print count_occurences(1, [2,1,3,1,4])
2
3

这个功能在Python里已经自带了:

>>> from collections import Counter
>>> Counter([2,1,3,1,4])[1]
2

如果你想用“长一点”的方法,可以使用字典:

d = {}
for i in [2,1,3,1,4]:
    d.setdefault(i, 0)
    d[i] += 1
print(d[1])  #  prints 2
5

你可以使用生成器表达式和 sum 函数,像这样

sum(item == x for item in y)

你可以把这个放到一个函数里,像这样

def counter(my_list, key):
    return sum(item == key for item in my_list)

assert counter([2, 1, 3, 1, 4], 1) == 2
assert counter([2, 1, 3, 1, 4], 5) == 0
assert counter([2, 1, 3, 1, 4], 2) == 1

之所以这样做是因为,在Python中,布尔值(也就是真和假)是整数的子类。所以,True 会被当作 1 来处理,而 False 会被当作 0。在我们的例子中,我们从 my_list 中取出每个元素,检查它是否等于 key。如果相等,它就会算作 1,否则算作 0。然后我们把所有的结果加起来。

撰写回答