Python組み込み関数3 -all・any編-
Pythonおさらい第3段
制約として公式ドキュメントのみ参照*1として、読む癖をつける訓練も兼ねる。
今回はall関数
とany関数
の2種類について。
ブログのレイアウト弄りをしていたとはいえ、日数が空いたうえでのこの薄さ……まずい。
all
はイテラブルの中身がすべてTrue
かどうか。
any
はイテラブルの中身のいずれかがTrue
かどうか。
残念ながらこれ以上の情報はこの記事から得られないので、どう水増しするか気になる人以外は解散!お疲れ様でした!
構成
今回の2つの関数は共通項が多いので同時に紹介していく。
all(iterable)
any(iterable)
ドキュメントによると、それぞれ以下のようなコードと等価です。
# all def all(iterable): for element in iterable: if not element: return False return True # any def any(iterable): for element in iterable: if element: return True return False
使ってみる
- 自作クラス
Person
を定義して、名簿member
を作成 member
に対しall
,any
をそれぞれ使用してその出力を見る
実行するコードは以下の通り。
class Person: def __init__(self, name: str, age: int): self.name = name self.age = age def __bool__(self): print(f'Check {self.name}: {self.age}') return self.age >= 20 member = [ Person('Otsuhachi', 28), Person('Taro', 18), Person('Jiro', 20), Person('Hanako', 14), ] print('All') print(all(member), '\n') print('Filterd') print(all(filter(lambda x: x.age >= 20, member))) print('-' * 30) print('Any') print(any(member), '\n') print('Filterd') print(any(filter(lambda x: x.age < 20, member)))
All Check Otsuhachi: 28 Check Taro: 18 False Filterd Check Otsuhachi: 28 Check Jiro: 20 True ------------------------------ Any Check Otsuhachi: 28 True Filterd Check Taro: 18 Check Hanako: 14 False
今回、Person
クラスでは成人をTrue
、未成年をFalse
と定義している。
all
を使用した結果、Taro
がFalse
を返した時点でFalse
が返されているのがわかる。
つぎにfilter(lambda x: x.age >= 20, member)
を使用して、all
に渡すメンバーから未成年を除外すると、成人であるOtsuhachi
とJiro
がチェックされ、True
が返った。
any
を使用した結果、Otsuhachi
がTrue
を返した時点でTrue
が返されているのがわかる。
つぎにfilter(lambda x: x.age < 20, member)
を使用してany
に渡すメンバーから成人を除外した結果、未成年であるTaro
とHanako
がチェックされ、False
が返った。
締め
ネタとしては極めて薄い関数ながら、コードの短縮という意味ではなかなかにありがたい関数だと思われる。
*1:わかりやすく解説している他サイトを見ない