具有目标值的python计数器

具有目标值的python计数器,python,counter,Python,Counter,我试图将两个值作为参数:一个列表值和一个目标值。它返回目标值出现在列表中的#次数 def countTarget(myList, target): #initialize the counter to zero counter = 0 for element in myList: #compare the value in the list to the target value #if they are the

我试图将两个值作为参数:一个列表值和一个目标值。它返回目标值出现在列表中的#次数

def countTarget(myList, target):
    #initialize the counter to  zero
    counter =   0
    for element in  myList:
        #compare    the value   in  the list to the target  value
        #if they    are the same,   increment   the counter
        if  element ==  target:
            counter =   counter +   1
    return  counter

好的,会有更好的答案,但这里有一个

def countTarget(myList, target):
    return sum([x == target for x in myList])
编辑

在评论中有一个更好的选择

myList.count(target)
…使用该类。这是一种特殊类型的dict,非常适合计算列表中某个特定值的频率(而不是自己使用dict),因为当试图计算列表中不存在的目标时(另一方面,
计数器将仅返回0),它会绕过一些小问题,例如遇到
键错误

或者,您可以对列表使用bult in
count
函数,如问题下方的注释所述

def countTarget(myList,target):返回myList.count(target)

然而,在这一点上,您的
countTarget
函数并没有给您带来多少好处。如果您真的想让两个对象都成为参数,还可以从静态上下文中使用count函数

list.count(我的列表,目标)


但说真的,只需使用myList.count(target)
。对于您的用例来说,它可能是最简单、最直接的(从外观上看)。如果你需要多次对目标进行计数,那么考虑前面提到的保持你自己的<代码>计数器/代码>。< /P> OK,看起来不错。您有什么问题吗?TypeError:“int”对象不是iterable@CaseyJones然后请描述问题中的问题并添加相关代码,特别是调用函数why not just do的代码:
myList.count(target)
?布尔值在求和时计算为0或1。答案是对的,这确实有效。这将计算出现的次数。这个函数确实起作用,但是OP的函数也起作用,所以我不确定这是否回答了这个问题。(虽然还不完全清楚问题是什么)虽然技术上是正确的,但这并不能回答问题(部分是OP的错,因为实际上没有提出任何问题)。这只是完成一些已经有效的事情的另一种方法,您不需要先构建列表,您可以
sum(x==myList中x的目标)
但是
list.count
似乎更适合单个值
from collections import Counter

def countTarget(myList, target):
  return Counter(myList)[target]