2

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

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

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")

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

4

3 回答 3

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) - 如果字母是 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 计数的字典。

于 2012-12-30T02:28:19.023 回答
1
NumberOfA = results.count("y") + results.count("yes") + results.count("Yes")
NumberOfB = results.count("n") + results.count("no") + results.count("No")
于 2012-12-30T02:28:58.580 回答
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"])
于 2012-12-30T02:35:19.500 回答