回答編集履歴

5

注意喚起

2017/07/16 13:42

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -131,3 +131,5 @@
131
131
 
132
132
 
133
133
  [http://www.pythonweb.jp/tutorial/list/index10.html](http://www.pythonweb.jp/tutorial/list/index10.html)
134
+
135
+ こちらはPython2.xなので、print関数ではなくprint文が用いられていますが。

4

リンクの追加

2017/07/16 13:42

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -127,3 +127,7 @@
127
127
  `リスト.index(x)`は、リスト内の値がxである**一番最初のインデックス**を返します。
128
128
 
129
129
  リストに変化がない限り、`list.index(3)`はいつ実行しても0です。
130
+
131
+
132
+
133
+ [http://www.pythonweb.jp/tutorial/list/index10.html](http://www.pythonweb.jp/tutorial/list/index10.html)

3

追記

2017/07/16 13:40

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -73,3 +73,57 @@
73
73
  **『n番目の要素のインデックスを取得したい』**という発言が生まれるのが不可解です。
74
74
 
75
75
  配列やリストに対する理解が足りません。
76
+
77
+
78
+
79
+ ---
80
+
81
+ **一応書いておくと**
82
+
83
+ ```Python
84
+
85
+ lines = [3, 4, 0, 1, 8, 2, 7, 3, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
86
+
87
+ for i in range(11):
88
+
89
+ try:
90
+
91
+ print(i, lines.index(i))
92
+
93
+ except:
94
+
95
+ print(i, 'Nothing')
96
+
97
+
98
+
99
+ """ output
100
+
101
+ 0 2
102
+
103
+ 1 3
104
+
105
+ 2 5
106
+
107
+ 3 0
108
+
109
+ 4 1
110
+
111
+ 5 Nothing
112
+
113
+ 6 Nothing
114
+
115
+ 7 6
116
+
117
+ 8 4
118
+
119
+ 9 15
120
+
121
+ """
122
+
123
+ ```
124
+
125
+
126
+
127
+ `リスト.index(x)`は、リスト内の値がxである**一番最初のインデックス**を返します。
128
+
129
+ リストに変化がない限り、`list.index(3)`はいつ実行しても0です。

2

回答の追加

2017/07/16 13:37

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -53,3 +53,23 @@
53
53
  消そうとしている**i+1番目の要素**がどれに当たるのか数えてみて下さい。
54
54
 
55
55
  予想通りでない場合は、なぜ予想と反するのかじっくり考えてください。
56
+
57
+
58
+
59
+ #二回目の質問に対する回答
60
+
61
+ `second_lines`が、全て`lines`の誤植であると捉えると、バグを再現できました。
62
+
63
+
64
+
65
+ 端的に言うと...
66
+
67
+ `idx_array.append(lines.index(lines[i]))`ではなく`idx_array.append(i)`で充分です。
68
+
69
+ 無駄に複雑にするからバグが生じるのです。
70
+
71
+
72
+
73
+ **『n番目の要素のインデックスを取得したい』**という発言が生まれるのが不可解です。
74
+
75
+ 配列やリストに対する理解が足りません。

1

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

2017/07/16 13:25

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -1,3 +1,53 @@
1
+ #当初の質問に対する回答
2
+
3
+
4
+
5
+ > 配列の要素を2つ削除できないです。
6
+
7
+ > ```ここに言語を入力
8
+
9
+ > lines = [2, 5, 0, 1, 8, 2, 6, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
10
+
11
+ > for i in range(10):
12
+
13
+ > if i % 2 ==0:
14
+
15
+ > if (lines[i] + lines[i+1]) == 10:
16
+
17
+ > print(lines[i])
18
+
19
+ > print(lines[i+1])
20
+
21
+ >
22
+
23
+ > del lines[i]
24
+
25
+ > print(lines)
26
+
27
+ > del lines[i+1]
28
+
29
+ > print(lines)
30
+
31
+ > print(lines)
32
+
33
+ > ```
34
+
35
+ > 上記のコードを実行すると、
36
+
37
+ > 4・5番目は合計が10になりますが
38
+
39
+ > del lines[i+1]の後のprint文print(lines) で
40
+
41
+ > [2, 5, 0, 1, 2, 2, 10, 2, 7, 0, 10, 10, 10, 9, 1, 3]
42
+
43
+ > と出力されて、なぜか2ではなく6が削除されてしまいました。
44
+
45
+ > これはどうしてなのでしょうか?del lines[i+1]とi+1と書いたのに。
46
+
47
+ > 目的の実装をするにはどう直せば良いのでしょうか?
48
+
49
+
50
+
1
51
  `del lines[i]`の後の`print(lines)`の出力を見て、
2
52
 
3
53
  消そうとしている**i+1番目の要素**がどれに当たるのか数えてみて下さい。