#当初の質問に対する回答
配列の要素を2つ削除できないです。
lines = [2, 5, 0, 1, 8, 2, 6, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
for i in range(10):
if i % 2 ==0:
if (lines[i] + lines[i+1]) == 10:
print(lines[i])
print(lines[i+1])
del lines[i]
print(lines)
del lines[i+1]
print(lines)
print(lines)
上記のコードを実行すると、
4・5番目は合計が10になりますが
del lines[i+1]の後のprint文print(lines) で
[2, 5, 0, 1, 2, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
と出力されて、なぜか2ではなく6が削除されてしまいました。
これはどうしてなのでしょうか?del lines[i+1]とi+1と書いたのに。
目的の実装をするにはどう直せば良いのでしょうか?
del lines[i]
の後のprint(lines)
の出力を見て、
消そうとしているi+1番目の要素がどれに当たるのか数えてみて下さい。
予想通りでない場合は、なぜ予想と反するのかじっくり考えてください。
#二回目の質問に対する回答
second_lines
が、全てlines
の誤植であると捉えると、バグを再現できました。
端的に言うと...
idx_array.append(lines.index(lines[i]))
ではなくidx_array.append(i)
で充分です。
無駄に複雑にするからバグが生じるのです。
**『n番目の要素のインデックスを取得したい』**という発言が生まれるのが不可解です。
配列やリストに対する理解が足りません。
一応書いておくと
Python
1lines = [3, 4, 0, 1, 8, 2, 7, 3, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
2for i in range(11):
3 try:
4 print(i, lines.index(i))
5 except:
6 print(i, 'Nothing')
7
8""" output
90 2
101 3
112 5
123 0
134 1
145 Nothing
156 Nothing
167 6
178 4
189 15
19"""
リスト.index(x)
は、リスト内の値がxである一番最初のインデックスを返します。
リストに変化がない限り、list.index(3)
はいつ実行しても0です。
http://www.pythonweb.jp/tutorial/list/index10.html
こちらはPython2.xなので、print関数ではなくprint文が用いられていますが。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/07/16 12:59
2017/07/16 13:02
2017/07/16 13:09
退会済みユーザー
2017/07/16 13:13
2017/07/16 13:18