💡
【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