如何更新多个for循环中的列表?

我想制作一个类似网格的结构,并愿意检查地理点是否位于单元格中?


我有坐标元组作为如下所示的元组,我有其他坐标作为列表的列表,其中还包含一些坐标,每个子列表中有不同数量的坐标。我想用元组中的地理坐标检查坐标内子列表的每个坐标。因此,我想要一个值为 1 或 0(基于给定条件)的坐标子列表的元组大小列表。如果坐标的子列表的坐标在data1的坐标范围内,则写1否则为0。


如果我从坐标的子列表中选择一个地理点 (6.8, 51.35),我将检查它的每个元组的地理坐标,例如 a=(x,y) 将其修改为 (z=x+0.49, p=y+0.49) , 0.49 因为单元格间隙是 0.05,然后将值 (6.8, 51.35) 与范围 (a,b) & (z,p) 进行比较,将值 (x,y) 替换为 1 否则为 0。


Tuple = ((6.8, 51.35), (6.85, 51.4), (6.9, 51.45), (6.95, 51.5), (7.0, 51.55), (7.05, 51.6), (7.1, 51.65), (7.15, 51.7), (7.2, 51.75), (7.25, 51.8), (7.3, 51.85), (7.35, 51.9), (7.4, 51.95), (7.45, 52.0), (7.5, 52.05), (7.55, 52.1), (7.6, 52.15), (7.65, 52.2), (7.7, 52.25), (7.75, 52.3), (7.8, 52.35), (7.85, 52.4), (7.9, 52.45), (7.95, 52.5), (8.0, 52.55), (8.05, 52.6), (8.1, 52.65), (8.15, 52.7), (8.2, 52.75), (8.25, 52.8), (8.3, 52.85), (8.35, 52.9), (8.4, 52.95), (8.45, 53.0), (8.5, 53.05), (8.55, 53.1), (8.6, 53.15), (8.65, 53.2), (8.7, 53.25), (8.75, 53.3), (8.8, 53.35), (8.85, 53.4), (8.9, 53.45), (8.95, 53.5), (9.0, 53.55), (9.05, 53.6), (9.1, 53.65), (9.15, 53.7), (9.2, 53.75), (9.25, 53.8), (9.3, 53.85), (9.35, 53.9), (9.4, 53.95), (9.45, 54.0), (9.5, 54.05), (9.55, 54.1), (9.6, 54.15), (9.65, 54.2), (9.7, 54.25), (9.75, 54.3), (9.8, 54.35), (9.85, 54.4), (9.9, 54.45))


coordinate = [[('9.72', '52.33071'), ('9.72005', '52.3306')],[('9.7909166', '52.353843'), ('9.7907', '52.35399'), ('9.7904', '52.35417'), ('9.7897', '52.35454'), ('9.7891696', '52.354815')]]

我写的代码是


for i in range(0,2):

    list=[]

    point=cordinate[i]

    y=len(cordinate[i])

    print(y)

    for j in range(0,y):

       l=float(point[j][0])

       m=float(point[j][1])

       #list=[]

       for k in range(0,len(Tuple)):

           x=Tuple[k][0]

           y=Tuple[k][1]

           gap = 0.049

           if (x < l < x + gap) and (y < m < y + gap):

               value = 1

           else:

               value = 0

           list.append(value)

   print(list)



翻翻过去那场雪
浏览 187回答 2
2回答

万千封印

你有三个问题。前两个是相关的:Vic指出无论内部if是否为True. 为了简化检查,请升级您的间隙检查代码gap = 0.049if (x < l < x + gap) and \&nbsp; &nbsp;(y < m < y + gap):&nbsp; &nbsp; value = 1else:&nbsp; &nbsp; value = 0list.append(value)这也解决了你的第二个问题:在“找到”的情况下,你会附加value两次:一次在 里面if,一次在之后。另外,请注意,您可以将该支票减少为一项较长的项目:list.append(int((x < l < x + gap) and (y < m < y + gap)))最后,您有一个问题,即您的数据不会1按设计产生任何值。您已经定义了一系列对角线单元格。第一个具有 (6.8, 51.35) 和 (6.849, 51.399) 的对角线;下一个在第二个角落开始并沿着网格的对角线继续。中的点coordinate不属于任何这些单元格。例如,第一点是(9.72, 52.33071)Tuple包含x坐标的网格 ( ) 点是(9.7, 54.25), (9.75, 54.3)但是所需的y坐标比该点高近两个单位(40 步)。因此,该点没有匹配的单元格。其他坐标点也有同样的问题。您根本没有任何符合条件的数据点,因此您的输出列表将全部为零。您的数据或问题描述似乎有误。

PIPIONE

Gautam 我同意上面关于 MCVE 提交的评论。根据您发布的代码,您可能想要查看的一个地方是您的 4 参数 if 语句:&nbsp; &nbsp; if l>x and l<z:&nbsp; &nbsp; &nbsp; if m>y and m<p:&nbsp; &nbsp; &nbsp; &nbsp; value=1&nbsp; &nbsp; else : value = 0您可能会从此代码中获得不需要的输出,因为您的 else 语句每次迭代都会执行。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python