appendがおかしい
解決したいこと
pythonで空の配列「z」にprint(b)で表示される配列「b」の中身をappendで追加していきたいと思っているのですがうまくいきません。
なぜかappendで追加した後の配列の要素数が2つ増えちゃったりしてしまいます。(笑)
print(b)で表示される要素をそのまま追加するにはどうしたらいいですか?
詳しい方いましたらよろしくお願いします。
※入力値は++-+--+++- +--+です。
入力に対する出力の想定
上記に述べた++-+--+++- +--+を例に説明します。
ここでは入力値の空白より左側を⓵、右側を⓶とします。
⓵(++-+--+++-)の各要素を右側と左側にある「+-」の組み合わせで⓶(+--+)の各要素の通りに更新するという操作を無限に繰り返し、入力されたときの形⓵(++-+--+++-)に戻ってこれるなら"YES"戻ってこれないなら"NO"を出力するというのが本来の目的です。
「+-」の組み合わせによる要素の変更は以下の通りです。
左が「-」右が「-」のときは⓶の1文字目に更新
左が「-」右が「+」のときは⓶の2文字目に更新
左が「+」右が「-」のときは⓶の3文字目に更新
左が「+」右が「+」のときは⓶の4文字目に更新
また⓵の一文字目にとっての左側は⓵の末尾、⓵の末尾にとっての右側は⓵の一文字目というルールになっています。
なぜ「z」に配列「b」の中身をappendしたいのか
まず、⓵に戻ってこれない場合がどのようなときなのかを考えました。
いろいろ考えた結果、「⓵の更新後に、入力されたときの形以外で繰り返されたものがあったとき」は⓵に戻ってこれないだろうと思ったので、これを表現するために⓵が更新されるたびにそれらを一つ一つ記憶し、新しい更新後のデータと記憶してきたすべてのデータを照らし合わせることを思いつきました。
「z」が記憶装置、「b」の中身が更新後のデータというイメージです。
なので私は「z」に「b」をappendしたいのです。
発生している問題・出力結果
['-', '-', '+', '+', '-', '-', '-', '+', '-', '+']
[['-', '-', '+', '+', '-', '-', '-', '+', '-', '+']]
['-', '-', '-', '-', '-', '+', '-', '+', '+', '+']
[['-', '-', '+', '+', '-', '-', '-', '+', '-', '+', '-', '-'], ['-', '-', '-', '-', '-', '+', '-', '+', '+', '+']]
['-', '+', '+', '+', '-', '+', '+', '-', '+', '-']
[['-', '-', '+', '+', '-', '-', '-', '+', '-', '+', '-', '-'], ['-', '-', '-', '-', '-', '+', '-', '+', '+', '+', '-', '-'], ['-', '+', '+', '+', '-', '+', '+', '-', '+', '-']]
['-', '-', '+', '-', '+', '-', '-', '+', '+', '-']
[['-', '-', '+', '+', '-', '-', '-', '+', '-', '+', '-', '-'], ['-', '-', '-', '-', '-', '+', '-', '+', '+', '+', '-', '-'], ['-', '+', '+', '+', '-', '+', '+', '-', '+', '-', '-', '-'], ['-', '-', '+', '-', '+', '-', '-', '+', '+', '-']]
['+', '-', '+', '+', '+', '-', '-', '-', '-', '-']
[['-', '-', '+', '+', '-', '-', '-', '+', '-', '+', '-', '-'], ['-', '-', '-', '-', '-', '+', '-', '+', '+', '+', '-', '-'], ['-', '+', '+', '+', '-', '+', '+', '-', '+', '-', '-', '-'], ['-', '-', '+', '-', '+', '-', '-', '+', '+', '-', '-', '-'], ['+', '-', '+', '+', '+', '-', '-', '-', '-', '-']]
YES
プログラムコード
a = input().split(" ")
b = list(a[0])
b1 = list(a[0])
c = list(a[1])
x = []
y = []
z = []
for i in b:
x.append(i)
for i in x:
y.append(i)
while True:
d = 0
for i in range(len(b)):
if b[d-1] == "-" and b[d+1] == "-":
x[d]=c[0]
if b[d-1] == "-" and b[d+1] == "+":
x[d]=c[1]
if b[d-1] == "+" and b[d+1] == "-":
x[d]=c[2]
if b[d-1] == "+" and b[d+1] == "+":
x[d]=c[3]
d+=1
if d == len(b)-1:
b.append(b[0])
if x == y:
print("YES")
break
b = []
for i in x:
b.append(i)
print(b)
z.append(b)
print(z)
自分で試したこと
理屈はわからないですがなんとなくコードの最後らへんにある
if d == len(b)-1:
b.append(b[0])
っていうコードが原因なのかなと思ったので、このコードを消した後,エラーにならないように真ん中らへんにある
for i in range(len(b)):をfor i in range(len(b)-1):に変更して実行するとprint(b)で表示される要素がそのまま追加されるんですよねぇ。。。(笑)
z.appendの前にb = []と書いていますし「x」の要素数も毎度変わりないはずなのになぜ
f d == len(b)-1:
b.append(b[0])
が影響してるような状況になってしまうのでしょうか。
そもそもなぜ直前にprint(b)表示している「b」の配列がz.append後には違くなったりしちゃうのでしょうか。