Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更新多重for循环中的列表?_Python_Python 3.x_List_Loops - Fatal编程技术网

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

Python 如何更新多重for循环中的列表?,python,python-3.x,list,loops,Python,Python 3.x,List,Loops,我想做一个网格状的结构,并愿意检查地理点是否位于单元中 我有一个如下所示的坐标元组,我有一个列表中的其他坐标,列表中也包含一些坐标,每个子列表中有不同数量的坐标。我希望检查子列表的每个坐标(内部坐标)和元组中的地理坐标。因此,我需要一个值为1或0(基于给定条件)的坐标子列表的元组大小列表。如果坐标子列表的坐标位于data1的坐标范围内,则写入1,否则写入0 Tuple = ((6.8, 51.35), (6.85, 51.4), (6.9, 51.45), (6.95, 51.5), (7.0,

我想做一个网格状的结构,并愿意检查地理点是否位于单元中

我有一个如下所示的坐标元组,我有一个列表中的其他坐标,列表中也包含一些坐标,每个子列表中有不同数量的坐标。我希望检查子列表的每个坐标(内部坐标)和元组中的地理坐标。因此,我需要一个值为1或0(基于给定条件)的坐标子列表的元组大小列表。如果坐标子列表的坐标位于data1的坐标范围内,则写入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')]]
如果我从坐标的子列表中选择一个地理点(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)的范围进行比较,用1替换值(x,y)

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)
那里的预期输出应该是大小为63的列表,其中包含0或1:

[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]

Gautam我同意上述关于MCVE提交的评论。根据您发布的代码,您可能希望查看的一个地方是您的4参数if语句:

    if l>x and l<z:
      if m>y and m<p:
        value=1
    else : value = 0

如果l>x、ly和m你有三个问题。前两个是相关的:
Vic
指出,无论内部
if
是否为
True
都会执行“else”子句。要简化检查,请使用升级间隙检查代码

gap = 0.049
if (x < l < x + gap) and \
   (y < m < y + gap):
    value = 1
else:
    value = 0

list.append(value)

最后,您还有一个问题,您的数据在设计时不会产生任何
1
值。您已经定义了一系列对角单元格。第一个具有(6.8,51.35)和(6.849,51.399)的对角;下一个在第二个拐角处拾取,并沿着网格的对角线继续

坐标中的点不属于这些单元格中的任何一个。例如,第一点是

(9.72, 52.33071)
包含
x
坐标的网格(
Tuple
)点为

(9.7, 54.25), (9.75, 54.3)
但是所需的
y
坐标比该点高出近两个单位(40步)。因此,该点没有匹配的单元格。其他坐标点也有同样的问题。您没有任何符合条件的数据点,因此您的输出列表将全部为零


您的数据或问题描述似乎有误。

您的描述包括
Data1
Data2
,但这不在示例代码中。您的代码还调用未显示的
cordinate
。也不清楚z和p代表什么。你能把你的例子简化一点,只保留你所需要的部分吗?欢迎来到StackOverflow。请按照您创建此帐户时的建议,阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您描述的问题。正如发帖指南告诉你的,让其他人更容易帮助你。单字母变量名和缺乏多样的示例使这一点很难理解。您发布的代码仍然无法运行。它仍然很难阅读。你的例子仍然是零。你真的需要63个输入点来说明你的问题吗???应该是MCVE,不是<代码>cordinate
未定义(拼写错误)。修复后,我仍然面临其他问题。我们仍在埋没细节。是的,添加两个长度相同的列表很简单。这在网上的许多地方都有涉及。这能解决你的问题吗?我还是不知道你想做什么。将两个列表相加可能会导致出现更高的数字,这超出了您描述的问题,也超出了您的编码尝试。我将等待问题规范和MCVE。根据您最新提交的内容,您希望输出为1或0。但是我在上面发布的代码总是将您的值引导到0。当l>x且l为真时,坐标中有许多点,我不能全部张贴在这里,我担心的是输出一个列表,对于每个坐标子列表,必须只有一个大小Tuple的列表。对于范围(0,len(Tuple))中的k,我有许多点:x=Tuple[k][0]y=Tuple[k][1]gap=0.05列表。追加(int((x(9.7, 54.25), (9.75, 54.3)