1. ホーム
  2. python

[解決済み] Pythonのリストの全要素に論理演算子を適用する方法

2022-11-03 05:29:37

質問

Pythonでbooleanのリストを持っています。私はそれらをAND(またはORまたはNOT)して結果を得たい。次のコードは動作しますが、非常にpythonicではありません。

def apply_and(alist):
 if len(alist) > 1:
     return alist[0] and apply_and(alist[1:])
 else:
     return alist[0]

よりpythonicにする方法についてのいかなる提案も感謝します。

どのように解決するのですか?

論理的 and の全ての要素に渡って a_list :

all(a_list)

論理的 or の全ての要素に渡って a_list :

any(a_list)


クリエイティブな気分なら、こんなこともできます。

import operator
def my_all(a_list):
  return reduce(operator.and_, a_list, True)

def my_any(a_list):
  return reduce(operator.or_, a_list, False)

は短絡的に評価されないことに留意してください ;-)

もう一つの面白い方法。

def my_all_v2(a_list):
  return len(filter(None,a_list)) == len(a_list)

def my_any_v2(a_list):
  return len(filter(None,a_list)) > 0

とさらに別の

def my_all_v3(a_list):
  for i in a_list:
    if not i:
      return False
  return True

def my_any_v3(a_list):
  for i in a_list:
    if i:
      return True
  return False

と一日中続けられますが、そうです、pythonicな方法は allany :-)

ちなみに、Pythonには末尾再帰除去機能がないので、LISPのコードを直接翻訳しようとしないでください ;-)