回答編集履歴

1

追記

2018/09/10 14:13

投稿

hayataka2049
hayataka2049

スコア30933

test CHANGED
@@ -25,3 +25,65 @@
25
25
 
26
26
 
27
27
  ```
28
+
29
+
30
+
31
+ ### 追記
32
+
33
+ 説明・・・しようと思ったけど、内包表記だとしんどいので先にループに書き下しました。
34
+
35
+
36
+
37
+ ```python
38
+
39
+ from collections import Counter
40
+
41
+ J = [[13, 4, 3, 20, 5, 7, 10, 15],
42
+
43
+ [3, 13, 4, 20, 5, 11, 5, 19],
44
+
45
+ [13, 4, 20, 8, 14, 19, 7, 3, 5, 10]]
46
+
47
+
48
+
49
+ lst = []
50
+
51
+ for l in J:
52
+
53
+ for pattern in zip(l, l[1:]):
54
+
55
+ lst.append(pattern)
56
+
57
+
58
+
59
+ counter = Counter(lst)
60
+
61
+ d = {}
62
+
63
+ for k,v in counter.items():
64
+
65
+ if v > 1:
66
+
67
+ d[k] = v
68
+
69
+ print(d)
70
+
71
+ ```
72
+
73
+
74
+
75
+ 本質的に説明が必要そうな場所は数箇所だけで、
76
+
77
+ - 全体的な方針
78
+
79
+ 「同一のリストに同じパターンはありません」を信じて出現しているパターンをすべて1つのリストにまとめ、`Counter`クラスを用いてカウントしています。参考:[PythonのCounterでリストの各要素の出現個数をカウント | note.nkmk.me](https://note.nkmk.me/python-collections-counter/)
80
+
81
+
82
+
83
+ - `zip(l, l[1:])`について
84
+
85
+ `[13, 4, 3, 20, 5, 7, 10, 15]`に対して`[(13,4), (4,3), (3,20),...,(10,15)]`を得る処理です。
86
+
87
+
88
+
89
+ 他になにかわかりづらい点があればコメントしてください。