我正在尝试组合通过sys.argv
传入的成对数字。
示例:
python myscript.py -35.12323 112.76767 -36.33345 112.76890 -33.68689 111.8980
我的目标是把它们变成两个一组的元组。 像这样:
((-35.12323,112.76767),(-36.33345,112.76890),(-33.68689,111.8980))
这是我到目前为止尝试过的,但是当我将结果传递给Shapely Point和Polygon方法时会出现问题。
from shapely.geometry import Polygon
from shapely.geometry import Point
import sys
def args_to_tuple(list):
arglist = []
for coord in list:
arglist.append(float(coord))
i = 0
polylist = []
for xory in arglist:
tmp = (arglist[i],arglist[i+1])
polylist.append(tmp)
return tuple(polylist)
poly = Polygon(args_to_tuple(sys.argv[3:]))
# xy pair for point is first two sys args
point = Point(args_to_tuple(sys.argv[1:3]))
print point.within(poly) # should result in true, but doesn't
print poly.contains(point) # should result in true, but doesn't
看起来这在itertools中是很常见的,但是我在那个模块中似乎找不到任何东西可以让您一对抓住项目。
我猜点构造函数可能会取1对,而不是包含1对的元组?为此,您需要更改:
致:
或者可能:
如果不知道shapely的API,我就不确定了。
至于将参数转换为成对元组,您的方法做得很好。但是,如果您想要一个预打包的无麻烦解决方案,我将查看pytoolz的partition_all方法,用于将对分组在一起。同样看看cytoolz,它努力使这些方法在性能上与C相媲美。
编辑
我注意到你的方法有缺陷。你没有在你的循环中从args_到tuple方法递增i!下面是一个修订版本,您可以在其中填充多段列表:
zip
可以替换为产生迭代器而不是列表的^{相关问题 更多 >
编程相关推荐