2

ややあいまいなタイトルで申し訳ありませんが、ここで詳しく説明します。

現在、値「y」と「n」が「結果」と呼ばれるリストに表示される回数をカウントする次のコードがあります。

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

たとえば、「yes」などの値も 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

このようなものは機能しますか?これは、リスト内の yes/no 風の回答のみに依存することに注意してください (「Yeah....um no」のようなものがそこにある場合は間違っています)。

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

于 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 に答える