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