如何合并元组列表?

时间:2016-09-12 17:46:17

标签: python python-3.x

我使用python 3

我有一个列表L,其中包含另一个列表,其中包含点(x,y)的累积:

L=[A, B, C, D ...]
A = [(1,1),(3,3),(4,5)...]
B=[(1,2),..(6,7)]

我想合并L中的所有列表,这些列表都有相邻的点。 如上所述:我们必须联合A,B,因为它们有一个相邻的点:(1)来自A,(1,2)来自B.并获得:L = [A + B,C,...]

我尝试过这样的代码:

if (x-1,y-1) in L[i] or (x-1,y) in L[i] or (x-1,y+1) in L[i] or (x,y-1) in L[i] or (x,y+1) in L[i] or (x+1,y-1) in L[i] or (x+1,y) in L[i] or (x+1,y+1) in L[i]:

但是我无法将所有列表都归结为L. 帮助

* 相邻点是点,它们之间的距离= 1,例如(1,1)和(1,2)。 (5,6)和(6,7)。 (8,7)和(7,7)

1 个答案:

答案 0 :(得分:0)

这是我的算法问题:

def adjacent(list_1, list_2):
    for elem_1 in list_1:
        for elem_2 in list_2:
            if abs(elem_1[0] - elem_2[0]) == 1 or\
               abs(elem_1[1] - elem_2[1]) == 1:
                   return True
    return False

def join_adjacent_points(L):
    result = []
    while len(L) > 0:
        result.append(L[0])
        L = L[1:]
        i = 0
        while i < len(L):
            if adjacent(L[i], result[-1]):
                result[-1] += L[i]
                del L[i]
                i = 0
            i += 1
    return result