上記の答えがうまくいかない理由については、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
。