まず結論

append() は、リストに要素を追加します。
ただし、追加後のリストを返すわけではありません。

items = ["りんご"]
result = items.append("みかん")

print(items)
print(result)

表示は次のようになります。

['りんご', 'みかん']
None

読む目安

次のようなコードで困った人向けです。

items = []
items = items.append("りんご")
print(items)

items にリストが入っているつもりなのに、None になってしまうことがあります。

イメージで考える

append() は、新しいリストを手渡すのではなく、今あるリストの棚に直接追加する動きです。

追加されたものは、元の items の中に入ります。

戻り値の受け取り箱には何も返ってこないので、そこを見ると None になります。

appendはその場で変える

append() は、元のリストをその場で変更します。

items = []
items.append("りんご")
items.append("みかん")

print(items)

このように、items = items.append(...) と書く必要はありません。

なぜNoneになる?

append() の戻り値が None だからです。

items = []
result = items.append("りんご")
print(result)

append() は「追加作業をした」だけで、結果として新しいリストを返しません。

正しい書き方

リストに追加したいだけなら、次の形にします。

items = []
items.append("りんご")
print(items)

items 自体が変更されるので、最後に items を見れば追加済みです。

似たつまずき

sort() でも同じようなことが起きます。

numbers = [3, 1, 2]
result = numbers.sort()

print(numbers)
print(result)

numbers は並び替わりますが、resultNone です。

読み方のコツ

append()sort() は、「元のリストを直接変える操作」と考えます。
戻り値を変数に入れるより、操作したあとの元のリストを見るのが基本です。

手を動かすミニ練習

append() の結果を変数に入れた場合と、元のリストを表示した場合を比べましょう。

numbers = [1, 2]
result = numbers.append(3)

print(result)
print(numbers)

append() は元のリストを変えるので、result ではなく numbers を見ます。