至于你上面的答案为什么不起作用,那是因为 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
) - 如果字母是 a y
,我们知道它是 a 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
's 和no
's 计数的字典。