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