次のように、2 つのブール値プロパティを持つユーザー オブジェクトがあります。
class User(object):
def __init__(self, a, b):
self.a = a # Always a bool
self.b = b # Always a bool
という名前のオブジェクトのリストがありuser_list
、a == True、a == False、b == True、および b == False を持つオブジェクトの頻度を取得したいと考えています。
私の最初のアプローチは collections.Counter を使用することでしたが、それにはリストを 2 回ループする必要があります。
a_count = collections.Counter(u.a for u in user_list)
b_count = collections.Counter(u.b for u in user_list)
print a_count[True], a_count[False], b_count[True], b_count[False]
4 つのカウンターだけを使用することも考えましたが、それは見苦しく、pythonic とは感じません。
a_true_count = 0
a_false_count = 0
b_true_count = 0
b_false_count = 0
for u in user_list:
if u.a:
a_true_count += 1
else:
a_false_count += 1
if u.b:
b_true_count += 1
else:
a_false_count += 1
print a_true_count, a_false_count, b_true_count, b_false_count
これを行うより効率的な方法はありますか?出力は何でもかまいません: 4 つの個々の変数、値を持つ dict、リスト、タプルなど、4 つの値が含まれている限り何でもかまいません。
前もって感謝します!