この記事は最終更新日から1年以上が経過しています。
はじめに
開発中にPythonで「リストの要素がすべて空文字列か」という判定をしたい場面があり、なにかないかと調べてみたら、allという組み込み関数で簡単に実装できました。
今回はそのall、対になるanyを紹介します。
all
リストやタプルのような、iterableオブジェクトの要素がすべて真のときにTrueを返す関数。
Pythonでの真は、数値は0以外、文字列は空文字列(“”)以外、
タプルは空のタプル()以外、リストは空のリスト[]以外、ディクショナリは空のディクショナリ{}以外など。
公式ドキュメントにも、書いてありますが、以下のコードと同じ。
def all(iterable): for element in iterable: if not element: return False return True |
例
>>> a = [True, True, True] >>> all(a) True >>> b = [True, True, False] >>> all(b) False |
any
iterableオブジェクトの要素が一つでも真のときにTrueを返す関数。
同じく公式ドキュメントにも、書いてありますが、以下のコードと同じ。
def any(iterable): for element in iterable: if element: return True return False |
例
>>> a = [False, False, False] >>> any(a) False >>> b = [True, False, False] >>> any(b) True |
どんな風に使ったか
「リストの要素がすべて空文字列か」の判定するために、リスト内包表記と合わせて使いました。
l = ['', '', ''] # すべて空文字列の要素 # リストの要素がすべて空文字列かの判定 all([x == '' for x in l]) # => True |
リスト内包表記部分は、各値の空文字列との比較結果を返しているので、
[x == '' for x in l] =>
[True, True, True]となっています。
これを使えば、「リストの要素がすべて正の数か」の判定が以下のように書けたり
all((x >= 0 for x in [1, 2, 3])) # => True all((x >= 0 for x in [1, 2, -3])) # => False |
anyを使って、「リストの要素が一つでも正の数か」の判定が以下のように書けます。
any((x >= 0 for x in [1, -2, -3])) # => True any((x >= 0 for x in [-1, -2, -3])) # => False |
まとめ
all関数が論理積で、any関数が論理和という感じです。
うまく関数を使うとすっきり書けたりしますね。
ちなみにRubyやC#にも同じようなのがあります。
この記事を書いた人
- 2017年入社の新卒です。
最近書いた記事
- 2019.10.11Pythonのアンパックとタプル
- 2019.01.22JavaScript側でsubmitができない
- 2018.12.13「AWS Toolkit for PyCharm について」~ RecoChoku Tech Night #09 4社合同 AWS re:Invent参加レポート で登壇しました ~
- 2018.12.02シリコンバレー1日ツアーに参加してきました(前半)