我有一个如下的二维列表:
a = [[3, 10], [7, 11], [7, 12], [8, 11], [8, 12], [12, 8], [12, 9], [13, 8], [13, 9], [14, 6], [14, 7], [15, 8], [17, 6], [18, 6]]
有4个点可以形成一个正方形:
[7, 11], [7, 12], [8, 11], [8, 12]
或者这个:
[12, 8], [12, 9], [13, 8], [13, 9]
这是我的代码:
def find_square(a):
i = 0
result = []
while(i < len(a)):
if a[i][0] == a[i + 1][0]:
if a[i][1] == a[i + 2][1]:
if a[i + 2][0] == a[i + 3][0]:
if a[i + 1][1] == a[i + 3][1]:
result.append([a[i][0] + 1, a[i][1] + 1])
i += 4
else:
i += 3
else:
i += 2
else:
i += 1
return result
输出:
[8, 12], [13, 9]
这段代码将返回正方形的最后一个点(右下角)。我想检查是否存在4个点,可以组成一条边长为1的正方形,并返回它的右下角。有更好的实现方法吗?
假设2D列表按x坐标升序排序。
更新:
我发现我的代码存在问题的情况:
[7, 11], [7, 12], [7, 13], [8, 11], [8, 12]
我的代码无法检测到正方形,是因为点[7, 13]
存在。
[7, 11],[7, 12],[7, 13],[8, 11],[8, 12]
。点[7, 13]
会位于正方形中间,而我的代码无法检测到该正方形。 - huy