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