回答編集履歴

2

追記

2018/03/22 05:44

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,20 +1,29 @@
1
1
  素直な方法。
2
2
  ```Python
3
- arr = [["A","B","C"],["D","E","F"],["G","H","I"]]
3
+ arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]]
4
4
 
5
5
  for y, row in enumerate(arr):
6
6
  try:
7
- x = row.index("G")
7
+ pos = (y, row.index("G"))
8
- pos = (y, x)
9
8
  break
10
9
  except ValueError:
11
10
  pass
12
- else:
13
- pos = None
14
11
 
15
12
  print(pos)
16
13
  ```
17
14
 
15
+ ちょっと捻った方法。
16
+ ```Python
17
+ from itertools import chain
18
+
19
+ arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]]
20
+
21
+ pos = divmod(
22
+ list(chain(*arr)).index("G"), len(arr[0])
23
+ )
24
+ print(pos)
25
+ ```
26
+
18
27
  内包表記を使った方法。
19
28
  ```Python
20
29
  arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]]

1

追記

2018/03/22 05:44

投稿

LouiS0616
LouiS0616

スコア35676

answer CHANGED
@@ -1,3 +1,30 @@
1
+ 素直な方法。
2
+ ```Python
3
+ arr = [["A","B","C"],["D","E","F"],["G","H","I"]]
4
+
5
+ for y, row in enumerate(arr):
6
+ try:
7
+ x = row.index("G")
8
+ pos = (y, x)
9
+ break
10
+ except ValueError:
11
+ pass
12
+ else:
13
+ pos = None
14
+
15
+ print(pos)
16
+ ```
17
+
18
+ 内包表記を使った方法。
19
+ ```Python
20
+ arr = [["A", "B", "C"], ["D", "E", "F"], ["G", "H", "I"]]
21
+
22
+ pos = [
23
+ (x, y) for y, row in enumerate(arr) for x, elem in enumerate(row) if arr[x][y] == "G"
24
+ ][0]
25
+ print(pos)
26
+ ```
27
+
1
28
  NumPyを使うのもアリかもしれませんね。
2
29
  ```Python
3
30
  import numpy as np
@@ -6,5 +33,5 @@
6
33
  )
7
34
 
8
35
  pos = tuple(nd[0] for nd in np.where(arr == "G"))
9
- print(pos) # (2, 0)
36
+ print(pos)
10
37
  ```