回答編集履歴
1
ppaul さん ご指摘不具合の修正版
test
CHANGED
@@ -40,9 +40,87 @@
|
|
40
40
|
|
41
41
|
|
42
42
|
|
43
|
-
あるいは次のコードかな
|
43
|
+
あるいは次のコードかな。
|
44
|
+
|
45
|
+
ppaul さん ご指摘の不具合があったため別コードにしました。
|
46
|
+
|
47
|
+
```Python
|
48
|
+
|
49
|
+
list1 = ['a', 'b', 'c']
|
50
|
+
|
51
|
+
list2 = ['d', 'f', 'e']
|
52
|
+
|
53
|
+
list3 = ['x', 'y', 'z']
|
54
|
+
|
55
|
+
list4 = ['b', 'f', 'g']
|
44
56
|
|
45
57
|
|
58
|
+
|
59
|
+
def merge_list(lst: [[]]) -> [[]]:
|
60
|
+
|
61
|
+
prelen = len(lst)
|
62
|
+
|
63
|
+
ovlp = [(i,k) for i in range(len(lst)) for k in range(i+1, len(lst)) if set(lst[i]) & set(lst[k])]
|
64
|
+
|
65
|
+
mono = set(range(len(lst))) - set(n for ov in ovlp for n in ov)
|
66
|
+
|
67
|
+
ans = [lst[i] for i in mono] + [sorted(set(lst[i]+lst[k])) for i,k in ovlp]
|
68
|
+
|
69
|
+
return ans if len(ans) == prelen else merge_list(ans)
|
70
|
+
|
71
|
+
|
72
|
+
|
73
|
+
lst = [ls[:2] for ls in (list1, list2, list3, list4)]
|
74
|
+
|
75
|
+
print(merge_list(lst)) # [['x', 'y'], ['a', 'b', 'd', 'f']]
|
76
|
+
|
77
|
+
```
|
78
|
+
|
79
|
+
不具合のあった旧コードベースで修正すると次のコードになります。
|
80
|
+
|
81
|
+
```Python
|
82
|
+
|
83
|
+
list1 = ['a', 'b', 'c']
|
84
|
+
|
85
|
+
list2 = ['d', 'f', 'e']
|
86
|
+
|
87
|
+
list3 = ['x', 'y', 'z']
|
88
|
+
|
89
|
+
list4 = ['b', 'f', 'g']
|
90
|
+
|
91
|
+
|
92
|
+
|
93
|
+
def merge_list(lst: [[]]) -> [[]]:
|
94
|
+
|
95
|
+
prelen = len(lst)
|
96
|
+
|
97
|
+
ans = []
|
98
|
+
|
99
|
+
for ls in lst:
|
100
|
+
|
101
|
+
for i, elm in enumerate(ans):
|
102
|
+
|
103
|
+
if set(ls) & set(elm):
|
104
|
+
|
105
|
+
ans[i] = sorted(set(ls + elm))
|
106
|
+
|
107
|
+
break
|
108
|
+
|
109
|
+
else:
|
110
|
+
|
111
|
+
ans.append(sorted(ls))
|
112
|
+
|
113
|
+
return ans if len(ans) == prelen else merge_list(ans)
|
114
|
+
|
115
|
+
|
116
|
+
|
117
|
+
lst = [ls[:2] for ls in (list1, list2, list3, list4)]
|
118
|
+
|
119
|
+
print(merge_list(lst)) # [['a', 'b', 'd', 'f'], ['x', 'y']]
|
120
|
+
|
121
|
+
```
|
122
|
+
|
123
|
+
以下は不具合のある旧コードです。
|
46
124
|
|
47
125
|
```Python
|
48
126
|
|