将列表中的多个元素添加到list.count(Python)

时间:2012-12-30 02:21:55

标签: list python-2.7

对于有点模糊的标题道歉,我会在这里尝试解释。

目前,我有以下代码,它计算值“y”和“n”在名为“results”的列表中显示的次数。

NumberOfA = results.count("y")
NumberOfB = results.count("n")

是否有办法使其成为例如“是”等值也计入NumberOfA?我正在思考以下几点:

NumberOfA = results.count("y" and "yes" and "Yes")
NumberOfB = results.count("n" and "no" and "No")

但这不起作用。这可能是一个很容易解决的问题,但是嘿。提前谢谢!

3 个答案:

答案 0 :(得分:1)

至于为什么上面的答案不起作用,这是因为Python只会获取你传入的表达式的最终值:

>>> 'Yes' and 'y' and 'yes'
'yes'

因此,您的count将会关闭,因为它只是在寻找最终值:

>>> results.count('yes' and 'y')
1
>>> results.count('yes' and '???')
0

这样的事情会起作用吗?请注意,这取决于它们在列表中只有是/否 - 式的答案(如果有'呀....嗯'这样的话就会出错):

In [1]: results = ['yes', 'y', 'Yes', 'no', 'NO', 'n']

In [2]: yes = sum(1 for x in results if x.lower().startswith('y'))

In [3]: no = sum(1 for x in results if x.lower().startswith('n'))

In [4]: print yes, no
3 3

一般的想法是获取结果列表然后遍历每个项目,小写它然后取第一个字母(startswith) - 如果字母是y,我们知道它是一个yes;否则,它将是no

如果你想做这样的事情,你也可以结合上面的步骤(注意这需要Python 2.7):

>>> from collections import Counter
>>> results = ['yes', 'y', 'Yes', 'no', 'NO', 'n']
>>> Counter((x.lower()[0] for x in results))
Counter({'y': 3, 'n': 3})

Counter个对象可以像字典一样对待,所以你现在基本上有一个字典,其中包含yesno的计数。

答案 1 :(得分:1)

NumberOfA = results.count("y") + results.count("yes") + results.count("Yes")
NumberOfB = results.count("n") + results.count("no") + results.count("No")

答案 2 :(得分:0)

创建方法

def multiCount(lstToCount, lstToLookFor):
    total = 0
    for toLookFor in lstToLookFor:
        total = total + lstToCount.count(toLookFor)
    return total

然后

NumberOfA = multiCount(results, ["y", "yes", "Yes"])
NumberOfB = multiCount(results, ["n", "no", "No"])