用Python填充坐标列表

用Python填充坐标列表,python,Python,我有一个排序的坐标列表,例如 coords = [[19, 52], [20, 52], [24, 52], [25, 52], [20, 53], [22, 53], [20, 54], [21, 54]] 我想填写坐标“中间”,这样得到的列表是: result = [[19, 52], [20, 52], [21, 52], [22, 52], [23, 52], [24, 52], [25, 52], [20, 53], [21, 53], [22, 53], [20, 54], [21

我有一个排序的坐标列表,例如

coords = [[19, 52], [20, 52], [24, 52], [25, 52], [20, 53], [22, 53], [20, 54], [21, 54]]
我想填写坐标“中间”,这样得到的列表是:

result = [[19, 52], [20, 52], [21, 52], [22, 52], [23, 52], [24, 52], [25, 52], [20, 53], [21, 53], [22, 53], [20, 54], [21, 54]]
我该怎么做?我们可以假设坐标中的“间隙”总是连续的或为零,就像坐标中的最后两个“元组”一样。我们这里也只处理整数。我已经成功地编写了一个函数,可以精确地为1个y坐标执行此操作:

def fillElements(sequence):
    k=0
    while (sequence[k][0]+1) == (sequence[(k+1) % len(sequence)][0]):
        k+=1
    if k == len(sequence):
        return sequence
    else:
        dummy = list(range((sequence[k][0]+1), sequence[k+1][0]))
        for l in range(len(dummy)):
            sequence.append([dummy[l], sequence[0][1]])
        return sequence
此函数首先通过比较当前元素的x值与下一个元素的x值来查找缺少坐标的“断点”;如果它们之间的距离超过1,则存在中断。我还处理了一些边缘情况,其中(I+1)超出了列表的长度;相反,它返回并与第一个条目进行比较。在这种情况下,当while循环结束时,运行索引k应该正好是序列的长度,并且序列返回时保持不变。如果运行索引小于序列的长度,则表示存在中断。在这种情况下,我使用range()创建了一个虚拟列表,其中包含所有缺少的x值,边界是第k个“tuple”,循环在这里被破坏,+1,因为我不希望有相同的x值两次,以及下一个元素。然后,我将这些值附加到带有y坐标的子列表中

然而,虽然这个函数可以工作,但是代码有点难看,就像我说的,它只对一个y坐标起作用。解决后一个问题是最重要的部分,但是如果有人建议改进此代码或首先使用其他方法,请让我知道。结果列表中坐标的顺序并不重要


e:对于“唯一y坐标”,例如“元组”[20,51],不应更改任何内容,因为“中间”没有任何元素。

如果我理解正确,您希望填补
x
坐标中的空白,每次
y
坐标更改时都会重置

下面是一个Python 3解决方案,可以实现这一点:

def fill_间隙(坐标):
last_x,last_y=无,无
对于坐标中的x,y:
如果y==最后一个y:
#填补最后一个值与我们之间的任何潜在差距
从([new_x,y]为范围内的新_x(last_x+1,x))的收益率
last_x,last_y=x,y
收益率[x,y]
这使用了一个生成器来简化代码,因此如果您想要一个列表,您需要使用
list()
来包装调用以实现这一点:

result=列表(填补空白(协调))

此解决方案要求按照您所述对坐标进行排序。

如果我理解正确,您希望填补
x
坐标中的空白,并在
y
坐标每次更改时重置

下面是一个Python 3解决方案,可以实现这一点:

def fill_间隙(坐标):
last_x,last_y=无,无
对于坐标中的x,y:
如果y==最后一个y:
#填补最后一个值与我们之间的任何潜在差距
从([new_x,y]为范围内的新_x(last_x+1,x))的收益率
last_x,last_y=x,y
收益率[x,y]
这使用了一个生成器来简化代码,因此如果您想要一个列表,您需要使用
list()
来包装调用以实现这一点:

result=列表(填补空白(协调))

此解决方案要求按照您所述对坐标进行排序。

如果输入是
[[1,3],[3,5]]
,结果应该是什么?如果输入是
[[1,4],[3,2]
,结果应该是什么?@mkrieger1在这种情况下,结果应该与输入相同。我将把它编辑成原始问题。如果输入是
[[1,3],[3,5]
,结果应该是什么?如果输入是
[[1,4],[3,2]
,结果应该是什么?@mkrieger1在这种情况下,结果应该与输入相同。我将把它编辑成原来的问题。太好了,非常感谢!看来我需要学习发电机的功能。太好了,非常感谢!看来我需要学习发电机的功能。