链式归类组合算法
存在如下二维列表:
[[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 = 0while num < len(point_1):num_2 = 0while num_2 < len(point_1[num]):num_3 = numwhile 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 += 1num_2 += 1num += 1print("point_1 = ", point_1)
输出:
point_1 = [[0, 5], [1, 2, 4, 7, 3, 6], [8, 9, 10, 11, 12, 13]]
该代码还能简化,不过先这样吧,三while嵌套循环搞得像个毛线球一样
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
