teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

注意喚起

2017/07/16 13:42

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -64,4 +64,5 @@
64
64
  `リスト.index(x)`は、リスト内の値がxである**一番最初のインデックス**を返します。
65
65
  リストに変化がない限り、`list.index(3)`はいつ実行しても0です。
66
66
 
67
- [http://www.pythonweb.jp/tutorial/list/index10.html](http://www.pythonweb.jp/tutorial/list/index10.html)
67
+ [http://www.pythonweb.jp/tutorial/list/index10.html](http://www.pythonweb.jp/tutorial/list/index10.html)
68
+ こちらはPython2.xなので、print関数ではなくprint文が用いられていますが。

4

リンクの追加

2017/07/16 13:42

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -62,4 +62,6 @@
62
62
  ```
63
63
 
64
64
  `リスト.index(x)`は、リスト内の値がxである**一番最初のインデックス**を返します。
65
- リストに変化がない限り、`list.index(3)`はいつ実行しても0です。
65
+ リストに変化がない限り、`list.index(3)`はいつ実行しても0です。
66
+
67
+ [http://www.pythonweb.jp/tutorial/list/index10.html](http://www.pythonweb.jp/tutorial/list/index10.html)

3

追記

2017/07/16 13:40

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -35,4 +35,31 @@
35
35
  無駄に複雑にするからバグが生じるのです。
36
36
 
37
37
  **『n番目の要素のインデックスを取得したい』**という発言が生まれるのが不可解です。
38
- 配列やリストに対する理解が足りません。
38
+ 配列やリストに対する理解が足りません。
39
+
40
+ ---
41
+ **一応書いておくと**
42
+ ```Python
43
+ lines = [3, 4, 0, 1, 8, 2, 7, 3, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
44
+ for i in range(11):
45
+ try:
46
+ print(i, lines.index(i))
47
+ except:
48
+ print(i, 'Nothing')
49
+
50
+ """ output
51
+ 0 2
52
+ 1 3
53
+ 2 5
54
+ 3 0
55
+ 4 1
56
+ 5 Nothing
57
+ 6 Nothing
58
+ 7 6
59
+ 8 4
60
+ 9 15
61
+ """
62
+ ```
63
+
64
+ `リスト.index(x)`は、リスト内の値がxである**一番最初のインデックス**を返します。
65
+ リストに変化がない限り、`list.index(3)`はいつ実行しても0です。

2

回答の追加

2017/07/16 13:37

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -25,4 +25,14 @@
25
25
 
26
26
  `del lines[i]`の後の`print(lines)`の出力を見て、
27
27
  消そうとしている**i+1番目の要素**がどれに当たるのか数えてみて下さい。
28
- 予想通りでない場合は、なぜ予想と反するのかじっくり考えてください。
28
+ 予想通りでない場合は、なぜ予想と反するのかじっくり考えてください。
29
+
30
+ #二回目の質問に対する回答
31
+ `second_lines`が、全て`lines`の誤植であると捉えると、バグを再現できました。
32
+
33
+ 端的に言うと...
34
+ `idx_array.append(lines.index(lines[i]))`ではなく`idx_array.append(i)`で充分です。
35
+ 無駄に複雑にするからバグが生じるのです。
36
+
37
+ **『n番目の要素のインデックスを取得したい』**という発言が生まれるのが不可解です。
38
+ 配列やリストに対する理解が足りません。

1

質問の内容が変わってしまったので

2017/07/16 13:25

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,3 +1,28 @@
1
+ #当初の質問に対する回答
2
+
3
+ > 配列の要素を2つ削除できないです。
4
+ > ```ここに言語を入力
5
+ > lines = [2, 5, 0, 1, 8, 2, 6, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
6
+ > for i in range(10):
7
+ > if i % 2 ==0:
8
+ > if (lines[i] + lines[i+1]) == 10:
9
+ > print(lines[i])
10
+ > print(lines[i+1])
11
+ >
12
+ > del lines[i]
13
+ > print(lines)
14
+ > del lines[i+1]
15
+ > print(lines)
16
+ > print(lines)
17
+ > ```
18
+ > 上記のコードを実行すると、
19
+ > 4・5番目は合計が10になりますが
20
+ > del lines[i+1]の後のprint文print(lines) で
21
+ > [2, 5, 0, 1, 2, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
22
+ > と出力されて、なぜか2ではなく6が削除されてしまいました。
23
+ > これはどうしてなのでしょうか?del lines[i+1]とi+1と書いたのに。
24
+ > 目的の実装をするにはどう直せば良いのでしょうか?
25
+
1
26
  `del lines[i]`の後の`print(lines)`の出力を見て、
2
27
  消そうとしている**i+1番目の要素**がどれに当たるのか数えてみて下さい。
3
28
  予想通りでない場合は、なぜ予想と反するのかじっくり考えてください。