有这么一组数据类似这样
1 2
5 6
2 3
5 7
9 10
希望生成如下列表
List1=[1,2,3]
List2=[5,6,7]
List3=[9,10]
from collections import defaultdict
arr_list = [[1, 2], [5, 6], [2, 3], [5, 7], [9, 10]]
p = [i for i in range(10+1)] # 10是arr_list中最大的那个数,如果数据过于稀疏可将其离散化
def find(x):
if p[x] != x:
p[x] = find(p[x])
return p[x]
res = defaultdict(list) # 用dict不行,会出现KeyError
for item in arr_list:
fa = find(item[0])
fb = find(item[1])
if not res[fa]:
res[fa].append(item[0])
if not res[fb]:
res[fb].append(item[1])
if fa != fb:
p[fa] = fb
res[fb].extend(res[fa])
res[fa] = []
for item in res:
if res[item]:
print(res[item])
如果你连二维list也不知道,思路还停留在一堆不一样的变量上,那这个问题是无解的
二维list,遍历一下,判断一下在哪个里面有相同的,那就把不同的也塞进对应的维度里
关键是你给的数据是比较简单的
如果有这样一组数据
1 2
3 4
2 3
那么一开始1 2和3 4是分开存放的,直到遇到了2 3,要求把它们全部合并到一起,这个是需要特殊处理的
s = """
1 2
5 6
2 3
5 7
9 10
"""
lines = s.split("\n")
List=[]
for l in lines:
if l.strip() == "": continue
li = l.strip().split(" ")
merged = False
for i,v in enumerate(List):
if len(set(li) & set(v)) > 0:
List[i] = sorted(list(set(li) | set(v)))
merged = True
break
if not merged:
List.append(li)
print(List)