質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1466閲覧

配列の要素のインデックスが取れない

退会済みユーザー

退会済みユーザー

総合スコア0

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

1クリップ

投稿2017/07/16 12:39

編集2017/07/16 13:12

配列の要素を2つ削除できないです。

lines = [3, 4, 0, 1, 8, 2, 7, 3, 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]) idx_array.append(lines.index(second_lines[i])) idx_array.append(lines.index(second_lines[i+1])) print(lines) print(idx_array)

とコードを書きました。0・1、2・3、4・5・・・番目の合計が10になる時、その時のセットの要素のインデックスをidx_arrayに格納したいです。例えば0・1番目の合計が10になるならidx_arrayに0・1とインデックスを格納したいです。
上記のコードを実行すると、
8のインデックスは4、2のインデックスは5, 7のインデックスは6、 3のインデックスは7ですが、
[4, 5, 6, 0] とprint(idx_array)で出力されました。[4, 5, 6, 7]が欲しいのに。なぜ最後のインデックスだけ0が取れてしまったのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

#当初の質問に対する回答

配列の要素を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:56

編集2017/07/16 13:42
LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/07/16 12:59

間違いに気づきました。質問を修正したのでもしお分かりでしたらお願いします。
LouiS0616

2017/07/16 13:02

問題が意味不明です。0番目の要素のインデックスは0ですし、1番目の要素のインデックスは1です。
LouiS0616

2017/07/16 13:09

そしてsecond_lineとは何ですか?
退会済みユーザー

退会済みユーザー

2017/07/16 13:13

問題文を修正しました。 8のインデックスは4、2のインデックスは5, 7のインデックスは6、 3のインデックスは7ですが、[4, 5, 6, 0] とprint(idx_array)で出力されてしまいました。[4, 5, 6, 7]と出力させたいのに、ということが質問です。
LouiS0616

2017/07/16 13:18

second_lineの本体は提示できないのですか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問