如何在Python中打印列表中元素出现的次数?
我有两个变量,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
。然后我们把所有的结果加起来。