对于有点模糊的标题道歉,我会在这里尝试解释。
目前,我有以下代码,它计算值“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")
但这不起作用。这可能是一个很容易解决的问题,但是嘿。提前谢谢!
答案 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
个对象可以像字典一样对待,所以你现在基本上有一个字典,其中包含yes
和no
的计数。
答案 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"])