4

約10個のブール変数があります。これらの10個の変数値がすべてTrueの場合は、新しいブール変数を設定する必要があります。x=Trueそのうちの1つがFalseの場合は、次x= Falseの方法で設定できます。

if (a and b and c and d and e and f...):
    x = True
else:
    x=False

これは明らかに非常に醜いように見えます。さらにいくつかのpythonicソリューションを提案してください。

醜い部分はa and b and c and d and e and f...

4

4 に答える 4

9

リスト/タプルにboolがあると仮定します。

x = all(list_of_bools)

または@minopretによって提案されたように

x= all((a, b, c, d, e, f))

例:

>>> list_of_bools = [True, True, True, False]
>>> all(list_of_bools)
False
>>> list_of_bools = [True, True, True, True]
>>> all(list_of_bools)
True
于 2012-08-15T06:32:16.693 に答える
1

を使用allするのはone and preferably only obvious way to do itPythonですが、これは、演算子モジュールのand_関数を使用して同じことを行い、削減する別のアプローチです。

>>> a = [True, True, False]
>>> from operator import and_
>>> reduce(and_, a)
False
>>> b = [True, True, True]
>>> reduce(and_, b)
True

編集: Duncanが述べたように、and_はビット&演算子であり、論理演算子ではありませんand。ブール値はint(1または0)にキャストされるため、ブール値に対してのみ機能します。

コメントを見るとall、OPが要求したことを達成するために実際にBIFを使用する必要があります。これを答えとして追加したいと思ったのは、たとえば、Qオブジェクトを使用してDjangoで複雑なdbクエリを作成したり、その他の場合に役立つことがあるためです。

于 2012-08-15T06:39:42.277 に答える
1
is_all_true = lambda *args:all(args)

a = True
b = True
c = True

print is_all_true(a,b,c)
于 2012-08-15T08:10:40.117 に答える
0
x = a and b and c and d and e ...

何度も計算する必要がある場合は、すべてのブール値を取得する関数の使用を検討してください(サイズについては何も想定せずに、リストまたはタプルとして使用することをお勧めします)。

于 2012-08-15T06:32:32.847 に答える