Pythonクイズ#2 – all (not so) True

2020.12.21

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

この記事はクイズのように使ってください。最初は問題を読んで解答を想像してみてください、その後に解答と説明も用意しています。

今週はall関数についての記事です。all関数にiterable(list, tupleなど)を渡してboolが返されます。全ての値はTrueに評価されたらallもTrueを返して、1つ以上の値がFalseになったらallはFalseを返します。

>>> all([True, True, True])
True
>>> all([True, False, True])
False

問題:出力はなんでしょうか?

>>> all([])
#1
>>> all([[]])
#2
>>> all([[[]]])
#3

解答

#1 True

#2 False

#3 True

説明

allのコードは以下のようにです

def all(iterable):
    for element in iterable:
        if not element:
            return False
    return True

#1 iterableは空っぽの場合、forに入らず、直ぐTrueを返します。

#2 iterableには空っぽリストが入っていたらforのif not elementはTrueになって、return Falseが実行されます。

#3 iterableに[[]]が入っています。Pythonでlistの長さは1以上の場合、boolの評価はTrueになります。if not elementはFalseなので、forから出てTrueを返します。

>>> if []:
...     print('empty list')
...
>>> if [[]]:
...     print('list with 1 value (empty list)')
list with 1 value (empty list)

注意

allへ渡す値に気を付けてください