Engineering

python all関数の使い方

  • 作成日:2024年3月11日1:03
  • 更新日:2024年3月13日0:35

python

Pythonのall関数は、リストをはじめとしたiterableを渡すとすべての要素がTrueの場合にTrue、それ以外の場合にFalseを返します。※空のiterableを渡した場合もTrueが返ってくることに注意が必要です。
list・文字列・tupleのほか、dictやファイルオブジェクト、また__iter__()メソッドあるいは__getitem__()メソッドを含むクラスを渡すことも可能です。
それぞれの要素をall関数の引数として渡した際の出力例を紹介します。


実行例:list型

Falseやint型の0などが含まれているとFalseが返ってきます。空配列を渡した場合はTrueになります。

a = [True, True, True]
b = [False, True, False]
c = [1, 2, 3]
d = [0, 1, 2]
e = []

print('all(a):', all(a))
print('all(b):', all(b))
print('all(c):', all(c))
print('all(d):', all(d))
print('all(e):', all(e))
all(a): True
all(b): False
all(c): True
all(d): False
all(e): True

実行例:文字列型

文字列を渡すことも可能ですがこちらは基本的にTrueになるはずです。

f = 'abc'
g = '012'
h = 'False'
i = ''
j = "'"

print('all(f):', all(f))
print('all(g):', all(g))
print('all(h):', all(h))
print('all(i):', all(i))
print('all(j):', all(j))
all(f): True
all(g): True
all(h): True
all(i): True
all(j): True

実行例:tuple型

tuple型も渡すことができます。list型を渡した場合と同様の返り値となります。

k = True, True, True
l = False, True, False
m = 1, 2, 3
n = 0, 1, 2
o = tuple()

print('all(k):', all(k))
print('all(l):', all(l))
print('all(m):', all(m))
print('all(n):', all(n))
print('all(o):', all(o))
all(k): True
all(l): False
all(m): True
all(n): False
all(o): True

実行例:辞書型

辞書型を渡した場合はkeyの値に基づいて返り値が決まります。

p = {True: True, True: True, True: False}
q = {True: True, True: True, False: True}
r = {'0': 0, '1': 1, '2': 2}
s = {0: '0', 1: '1', 2: '2'}
t = {}

print('all(p):', all(p))
print('all(q):', all(q))
print('all(r):', all(r))
print('all(s):', all(s))
print('all(t):', all(t))
all(p): True
all(q): False
all(r): True
all(s): False
all(t): True

実行例:ファイルオブジェクト

ファイルオブジェクトを渡すことも可能です。

例に使用したsample.txtは以下のファイルで、empty.txtは空のファイルです。

This is a sample text file.
This is second line.
False
''
0

This is the end of file.
import os

with open('sample.txt', 'r') as file:

    print(file)
    print('all(file):', all(file))


with open('empty.txt', 'r') as file:

    print(file)
    print('all(file):', all(file))
<_io.TextIOWrapper name='sample.txt' mode='r' encoding='UTF-8'>
all(file): True
<_io.TextIOWrapper name='empty.txt' mode='r' encoding='UTF-8'>
all(file): True

実行例:クラス

__iter__や__getitem__メソッドが実装されているクラスもall関数で評価可能です。

class U:
    def __init__(self):
        self.list_ = iter([0, 1, 2, 3])

    def __iter__(self):
        return self.list_

u = U()

class V:
    def __init__(self):
        self.list_ = iter([1, 2, 3, 4])

    def __iter__(self):
        return self.list_

v = V()


class X:
    def __init__(self):
        self.dict_ = {0: 0, 1: 1, 2: 2}

    def __getitem__(self, idx):
        return self.dict_[idx]

x = X()

class Y:
    def __init__(self):
        self.dict_ = {0: 1, 1: 2, 2: 3}

    def __getitem__(self, idx):
        if idx <= 2:
            return self.dict_[idx]
        else:
            raise IndexError

y = Y()

print('all(u):', all(u))
print('all(v):', all(v))
print('all(x):', all(x))
print('all(y):', all(y))
all(u): False
all(v): True
all(x): False
all(y): True




参考文献:
- https://docs.python.org/3/library/functions.html#all
- https://docs.python.org/ja/3/glossary.html#term-iterable
- https://docs.python.org/ja/3/reference/datamodel.html#object.getitem
- https://qiita.com/kanekom/items/8e151a581fb7d07abad7