Engineering
python any関数の使い方
- 作成日:2024年3月13日0:32
- 更新日:2024年3月13日0:32
python
Pythonのany関数は、リストをはじめとしたiterableを渡すと一つでもTrueとなる要素があればTrue、それ以外の場合にFalseを返します。※空のiterableを渡した場合はFalseが返ってくることに注意が必要です。
list・文字列・tupleのほか、dictやファイルオブジェクト、また__iter__()メソッドあるいは__getitem__()メソッドを含むクラスを渡すことも可能です。
それぞれの要素をany関数の引数として渡した際の出力例を紹介します。
実行例:list型
Trueや0以外のint型などが含まれているとTrueが返ってきます。空配列を渡した場合はFalseになります。
a = [False, False, False]
b = [False, True, False]
c = [1, 2, 3]
d = [0, 1, 2]
e = []
print('any(a):', any(a))
print('any(b):', any(b))
print('any(c):', any(c))
print('any(d):', any(d))
print('any(e):', any(e))
any(a): False
any(b): True
any(c): True
any(d): True
any(e): False
実行例:文字列型
文字列を渡すことも可能ですが空文字のみFalseになるはずです。
f = 'abc'
g = '012'
h = 'False'
i = ''
j = "'"
print('any(f):', any(f))
print('any(g):', any(g))
print('any(h):', any(h))
print('any(i):', any(i))
print('any(j):', any(j))
any(f): True
any(g): True
any(h): True
any(i): False
any(j): True
実行例:tuple型
tuple型も渡すことができます。list型を渡した場合と同様の返り値となります。
k = False, False, False
l = False, True, False
m = 1, 2, 3
n = 0, 1, 2
o = tuple()
print('any(k):', any(k))
print('any(l):', any(l))
print('any(m):', any(m))
print('any(n):', any(n))
print('any(o):', any(o))
any(k): False
any(l): True
any(m): True
any(n): True
any(o): False
実行例:辞書型
辞書型を渡した場合はkeyの値に基づいて返り値が決まります。
p = {False: True, False: True, False: False}
q = {True: False, True: False, False: False}
r = {'0': 0, '1': False}
s = {0: '0', False: '1'}
t = {}
print('any(p):', any(p))
print('any(q):', any(q))
print('any(r):', any(r))
print('any(s):', any(s))
print('any(t):', any(t))
any(p): False
any(q): True
any(r): True
any(s): False
any(t): False
実行例:ファイルオブジェクト
ファイルオブジェクトを渡すことも可能です。
例に使用した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('any(file):', any(file))
with open('empty.txt', 'r') as file:
print(file)
print('any(file):', any(file))
<_io.TextIOWrapper name='sample.txt' mode='r' encoding='UTF-8'>
any(file): True
<_io.TextIOWrapper name='empty.txt' mode='r' encoding='UTF-8'>
any(file): False
実行例:クラス
__iter__や__getitem__メソッドが実装されているクラスもany関数で評価可能です。
class U:
def __init__(self):
self.list_ = iter([0, 0, 0, 0])
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: 0, 1: 0, 2: 0}
def __getitem__(self, idx):
if idx <= 2:
return self.dict_[idx]
else:
raise IndexError
y = Y()
print('any(u):', any(u))
print('any(v):', any(v))
print('any(x):', any(x))
print('any(y):', any(y))
any(u): False
any(v): True
any(x): True
any(y): False
参考文献:
- 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