💡

【Python3】リストに代入演算子+=で文字列を追加したら1文字ずつ追加された

に公開

この問題で得られた学び

代入演算子+=appendメソッドの使い分け。

起こった問題

+=でリストに文字列を追加したら1文字ずつの要素として追加された

for i in range(1, n + 1):
    li += (str(i)) # 問題の箇所
    print(" ".join(li))

2桁以上になると問題が発生し以下のようになる

1 2 3 4 5 6 7 8 9 1 0
1 2 3 4 5 6 7 8 9 1 0 1 1

文字列を追加したいなら代入演算子ではなくappendを使おう

for i in range(1, n + 1):
    li.append(str(i))
    print(" ".join(li))

appendを使うと1つの要素として追加できる

1 2 3 4 5 6 7 8 9 10
1 2 3 4 5 6 7 8 9 10 11

何故こんなことが起こるのか

文字列型はイテラブルな(反復可能な)オブジェクトだから。

再代入演算子を使ってリストにリストを追加すると、

li = [1, 2, 3]
li += [4, 5]

リストの中身は

[1, 2, 3, 4, 5]

となる。[1, 2, 3, [4, 5]]にはならない。

同様に文字列も1文字ごとに追加されるため、自分の想定とは違う結果となった。

教訓

イテラブルなオブジェクトを1つの要素としてリストに追加した時はappendメソッドを使おう。

Discussion