存在如下二维列表:
[[0, 5], [1, 2], [1, 4], [2, 1], [2, 4], [2, 7], [3, 4], [3, 6], [4, 1], [4, 2], [4, 3], [4, 7], [5, 0], [6, 3],
[7, 2], [7, 4], [8, 9], [8, 10], [8, 11], [8, 12], [9, 8], [9, 10], [9, 11], [9, 12], [10, 8], [10, 9], [10, 11],
[10, 12], [11, 8], [11, 9], [11, 10], [11, 12], [11, 13], [12, 8], [12, 9], [12, 10], [12, 11], [12, 13], [13, 11], [13, 12]]
该列表代表点与点之间存在链接,共计14个点
现需将含有相同数字的元素列表合并一起,即将其合成为:[[0, 5], [1, 2, 4, 7, 3, 6], [8, 9, 10, 11, 12, 13]]
基本思路为:
1、逐个查询元素列表中是否含有相应的数字
2、如果包含,则判断另一个值是否存在于被检列表中,是则删除该列表元素,否则添加该元素
代码:
point_1 = [[0, 5], [1, 2], [1, 4], [2, 1], [2, 4], [2, 7], [3, 4], [3, 6], [4, 1], [4, 2], [4, 3], [4, 7], [5, 0],
[6, 3], [7, 2], [7, 4], [8, 9], [8, 10], [8, 11], [8, 12], [9, 8], [9, 10], [9, 11], [9, 12], [10, 8],
[10, 9], [10, 11], [10, 12], [11, 8], [11, 9], [11, 10], [11, 12], [11, 13], [12, 8], [12, 9], [12, 10],
[12, 11], [12, 13], [13, 11], [13, 12]]
num = 0
while num < len(point_1):
num_2 = 0
while num_2 < len(point_1[num]):
num_3 = num
while num_3 < len(point_1) - 1:
if point_1[num][num_2] == point_1[num_3 + 1][0] and point_1[num_3 + 1][1] not in point_1[num]:
point_1[num].append(point_1[num_3 + 1][1])
del point_1[num_3 + 1]
elif point_1[num][num_2] == point_1[num_3 + 1][1] and point_1[num_3 + 1][0] not in point_1[num]:
point_1[num].append(point_1[num_3 + 1][0])
del point_1[num_3 + 1]
elif (point_1[num][num_2] == point_1[num_3 + 1][0] and point_1[num_3 + 1][1] in point_1[num]) or (
point_1[num][num_2] == point_1[num_3 + 1][1] and point_1[num_3 + 1][0] in point_1[num]):
del point_1[num_3 + 1]
elif point_1[num][num_2] != point_1[num_3 + 1][0] and point_1[num][num_2] != point_1[num_3 + 1][1]:
num_3 += 1
num_2 += 1
num += 1
print("point_1 = ", point_1)
输出:
point_1 = [[0, 5], [1, 2, 4, 7, 3, 6], [8, 9, 10, 11, 12, 13]]
该代码还能简化,不过先这样吧,三while嵌套循环搞得像个毛线球一样