Python 为什么不是';是否继续停止if循环中断?
我有一个命名多边形列表:Python 为什么不是';是否继续停止if循环中断?,python,python-3.x,Python,Python 3.x,我有一个命名多边形列表: import pandas as pd import geopandas as gp df = gp.GeoDataFrame([['a',Polygon([(1, 0), (1, 1), (2,2), (1,2)])], ['b',Polygon([(1, 1), (2,2), (3,1)])]], columns = ['name','geometry']) df = gp.GeoDat
import pandas as pd
import geopandas as gp
df = gp.GeoDataFrame([['a',Polygon([(1, 0), (1, 1), (2,2), (1,2)])],
['b',Polygon([(1, 1), (2,2), (3,1)])]],
columns = ['name','geometry'])
df = gp.GeoDataFrame(df, geometry = 'geometry')
和命名点列表:
points = gp.GeoDataFrame( [['box', Point(1.5, 1.75)],
['cone', Point(3.0,2.0)],
['triangle', Point(2.5,1.25)]],
columns=['id', 'geometry'],
geometry='geometry')
我想返回多边形内的点的名称列表,以及它们与代码所属的多边形的名称:
n=0
for name in points:
if df['geometry'][n].contains(points['geometry'][n]) == True:
print(points['id'][n],df['name'][n])
n+=1
这将返回第一个点,但循环在第二个点中断,因为if
语句返回False
我尝试使用continue
语句让循环进入下一个迭代,如下所示:
n=0
for name in points:
if df['geometry'][n].contains(points['geometry'][n]) == True:
print(points['id'][n],df['name'][n])
n+=1
continue
但这仍然只返回第一个点和多边形的结果
如何阻止“False”结果中断循环?您使用的for循环不正确<代码>点仅包含一个条目
for geo1, name, geo2, id in zip(df['geometry'], df['name'], points['geometry'], points['id']):
if geo1.contains(geo2):
print(id, name)
还是要将每个df几何体与每个点进行比较
for geo1, name in zip(df['geometry'], df['name']):
for geo2, id in zip(points['geometry'], points['id']):
if geo1.contains(geo2):
print(id, name)
continue
在那里没有做任何事情,因为循环无论如何都会这样做。if
语句没有脱离循环,因为它不包含break
语句。在for
循环结束时,一个无条件的continue
没有效果。@kindall我看到了,在这种情况下,我一定是误解了原始循环中发生的事情。为什么它不继续到原始代码中的第三个点?您正在点中循环name
。但似乎您真的想在n
范围内循环。是的!第二个代码很有效,非常感谢。恐怕我对邮政编码不太熟悉,它在这儿干什么?