我有两个变量,x和y,其中x是数字,y是数字列表。
我必须定义一个函数 count ,它确定x在y中出现的次数, 例如,
count(1,[2,1,3,1,4])
应该返回2。
提前感谢您的建议。
NB。我不允许使用内置计数功能,即y.count(x)。
答案 0 :(得分: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
。然后我们sum
整个结果。
答案 1 :(得分:3)
它已内置于Python:
>>> from collections import Counter
>>> Counter([2,1,3,1,4])[1]
2
如果你想这样做" long"方式,使用字典:
d = {}
for i in [2,1,3,1,4]:
d.setdefault(i, 0)
d[i] += 1
print(d[1]) # prints 2
答案 2 :(得分: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