目次

目次

Pythonのall関数を用いてリストの要素がすべて空文字列か判定する

アバター画像
海津 純平
アバター画像
海津 純平
最終更新日2018/02/23 投稿日2018/02/23

はじめに

開発中に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#にも同じようなのがあります。

アバター画像

海津 純平

目次