環境設定 数値 文字列 正規表現 リスト タプル 集合 辞書 ループ 関数 クラス データクラス 時間 パス ファイル スクレイピング その他

Pythonのリストが空かどうかチェックする:長さ判定よりはif notを使う(PEP 8)

最終更新日 2023.02.18

リストが空かどうかチェックするときは if not を使います。

a = [1, 2, 3]
b = []

if not a:
    print('aは空です')
else:
    print('aは空ではありません')

if not b:
    print('bは空です')
else:
    print('bは空ではありません')

# aは空ではありません
# bは空です

リストの長さで空判定する

Python のリストが空かどうかは、そのリストの長さからもわかります。

x = [1, 2, 3]
y = []

if len(x) == 0:
    print('xは空です')
else:
    print('xは空ではない')

if len(y) == 0:
    print('yは空です')
else:
    print('yは空ではない')

# xは空ではない
# yは空です

実はこのコードは Python が(PEP 8 で)公式に「非推奨」としています。

For sequences, (strings, lists, tuples), use the fact that empty sequences are false.

Yes: if not seq:
     if seq:

No:  if len(seq):
     if not len(seq):

Source: PEP 8 -- Style Guide for Python Code

多くのプログラマーがこうしたコードを書いてしまいます。実際、このコードは大きな問題を抱えていないように見えます。Python は、Python 開発者が PEP 8 といったルールに従ってコードを書くところに強みがあります。

リスト内リスト

リストの中にリストがあり、そのリストが長さ 0 の文字列だったり、そもそも要素を持たなかったりするときはどうでしょうか?

a = [['']]
b = [[]]

if not a:
    print('aは空です')
else:
    print('aは空ではありません')

if not b:
    print('bは空です')
else:
    print('bは空ではありません')

# aは空ではありません
# bは空です

実はどちらも空とみなされません。長さを測るやり方ではどうでしょうか?

x = [[]]

if len(x) == 0:
    print('xは空です')
else:
    print('xは空ではない')

# xは空ではない

空のリストは実体のある要素と扱われる

空のリストしかもたないリストの長さは 1 です。

x = [[]]

a = len(x)

print(a)  # 1

空のリストも一つのインスタンスであり、それを含むリストにとっては実体のある要素なのです。