回答編集履歴
3
コードの解説(コメントへの回答)
test
CHANGED
@@ -77,3 +77,39 @@
|
|
77
77
|
|
78
78
|
|
79
79
|
なので,いったん 要素の`0`番目が`0`のものをすべて取り出しておいて,あとからもう一度ループを回して処理するという方針にしました.
|
80
|
+
|
81
|
+
|
82
|
+
|
83
|
+
---
|
84
|
+
|
85
|
+
|
86
|
+
|
87
|
+
Yの各要素について,自分以外の要素と共通な数値を持つかどうか,というのを判定します.
|
88
|
+
|
89
|
+
|
90
|
+
|
91
|
+
判定は`Y[0]`から,`Y[0] - Y[1], Y[0] - Y[1], ..., Y[0] - Y[n-1]` としていきます(`n` は `len(Y)`).
|
92
|
+
|
93
|
+
共通だと判定された時点で,`Y[0]` を 共通なグループに合併して,判定をやめて次(`Y[1]`)に移ります.
|
94
|
+
|
95
|
+
これを `Y[n-1]` まで行います
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
`Y[0]`について判定が終わった時点で,`Y[0]` に含まれていた数値は,
|
100
|
+
|
101
|
+
1. `Y[1] .. Y[n]` に含まれている
|
102
|
+
|
103
|
+
1. `Y[1] .. Y[n]` に含まれいない
|
104
|
+
|
105
|
+
|
106
|
+
|
107
|
+
のどちらかですが,いずれの場合もこれ以降`Y[0]`についての判定は必要ありません.
|
108
|
+
|
109
|
+
|
110
|
+
|
111
|
+
なので,内側のループは `i+1`からになっています.
|
112
|
+
|
113
|
+
|
114
|
+
|
115
|
+
合併後に`Y[i].clear()` としているのは,後で削除しやすいように空のの `set` にしています.`Y[i] = set()` と同じです.
|
2
コード修正
test
CHANGED
@@ -5,8 +5,6 @@
|
|
5
5
|
```python
|
6
6
|
|
7
7
|
X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2]]
|
8
|
-
|
9
|
-
# or
|
10
8
|
|
11
9
|
# X = [[0, 3, 7], [0, 9, 8], [1, 1, 6], [1, 8, 3], [0, 5, 9], [1, 1, 5], [0, 8, 3], [1, 8, 2],[0, 2, 4]]
|
12
10
|
|
@@ -28,13 +26,13 @@
|
|
28
26
|
|
29
27
|
for i in range(len(Y) - 1):
|
30
28
|
|
31
|
-
for j in range(i+1, len(Y)):
|
29
|
+
for j in range(i + 1, len(Y)):
|
32
30
|
|
33
|
-
if
|
31
|
+
if not Y[i].isdisjoint(Y[j]):
|
34
32
|
|
35
|
-
Y[j] = Y[i]
|
33
|
+
Y[j] |= Y[i]
|
36
34
|
|
37
|
-
Y[i]
|
35
|
+
Y[i].clear()
|
38
36
|
|
39
37
|
break
|
40
38
|
|
1
元のコードのエラーの原因と,回答のコードの解説を追加
test
CHANGED
@@ -51,3 +51,31 @@
|
|
51
51
|
# [[3, 5, 7, 8, 9], [2, 4]]
|
52
52
|
|
53
53
|
```
|
54
|
+
|
55
|
+
|
56
|
+
|
57
|
+
---
|
58
|
+
|
59
|
+
|
60
|
+
|
61
|
+
エラーの原因は `xSet` が `set` ではないからなので,`xSet = set(X[i][1:3])` とすればエラーは消えます.
|
62
|
+
|
63
|
+
しかし,今のコードでは`temp` が毎回初期化されるので,エラーが消えてもアウトプット(`Y`)は
|
64
|
+
|
65
|
+
|
66
|
+
|
67
|
+
```
|
68
|
+
|
69
|
+
[[8, 3, 7]]
|
70
|
+
|
71
|
+
```
|
72
|
+
|
73
|
+
|
74
|
+
|
75
|
+
です.
|
76
|
+
|
77
|
+
また,今の方針だと,一度違うグループだと判定されたものが後から同じグループに属するようになった場合には対処できません.
|
78
|
+
|
79
|
+
|
80
|
+
|
81
|
+
なので,いったん 要素の`0`番目が`0`のものをすべて取り出しておいて,あとからもう一度ループを回して処理するという方針にしました.
|