回答編集履歴

1

追記

2018/07/04 20:33

投稿

LouiS0616
LouiS0616

スコア35660

test CHANGED
@@ -21,3 +21,81 @@
21
21
 
22
22
 
23
23
  ただ、さすがにこれは読みづらいので、適当に処理を分けた方が良いです。
24
+
25
+
26
+
27
+ ---
28
+
29
+ こんな感じに組んでみても面白いかもしれませんね。
30
+
31
+ ```Python
32
+
33
+ lst = [[1, 1, 1, 1], [2, 2, 5, 2], [100, [1, 2, 4], 0, 2], 2]
34
+
35
+ print(lst)
36
+
37
+
38
+
39
+ def _recursive_enumerate_inner(src, indice):
40
+
41
+ if isinstance(src, (list, tuple)):
42
+
43
+ for i, inner in enumerate(src):
44
+
45
+ yield from _recursive_enumerate_inner(inner, indice + [i])
46
+
47
+ else:
48
+
49
+ yield indice, src
50
+
51
+
52
+
53
+ def recursive_enumerate(src):
54
+
55
+ yield from _recursive_enumerate_inner(src, [])
56
+
57
+
58
+
59
+ def recursive_index(src, purpose):
60
+
61
+ return (
62
+
63
+ indice
64
+
65
+ for indice, elem in recursive_enumerate(src)
66
+
67
+ if elem == purpose
68
+
69
+ )
70
+
71
+
72
+
73
+ purpose = 2
74
+
75
+ for ans in recursive_index(lst, purpose):
76
+
77
+ print(f'{purpose} at {ans}.')
78
+
79
+ ```
80
+
81
+
82
+
83
+ **実行結果** [Wandbox](https://wandbox.org/permlink/vmYOV4Yg3FpbokV0)
84
+
85
+ ```plain
86
+
87
+ [[1, 1, 1, 1], [2, 2, 5, 2], [100, [1, 2, 4], 0, 2], 2]
88
+
89
+ 2 at [1, 0].
90
+
91
+ 2 at [1, 1].
92
+
93
+ 2 at [1, 3].
94
+
95
+ 2 at [2, 1, 1].
96
+
97
+ 2 at [2, 3].
98
+
99
+ 2 at [3].
100
+
101
+ ```