猿问

遍历python不定常不定维数组

有一大推geojson数据,现在需要对其进行坐标转换,geojson数据示例
coordinates=[119,35]
coordinates=[[119,35],[119,35]]
coordinates=[[[119,35],[119,35]],[[119,35],[119,35]]]
期望转换后的坐标:
coordinates=[11900,3500]
coordinates=[[11900,3500],[11900,3500]]
coordinates=[[[11900,3500],[11900,3500]],[[11900,3500],[11900,3500]]]
怎么遍历到每一个position(坐标对)?
我现在是这么做的:
deftransform(x,y,other_parameter):
return....
defmiterator(ary,mapper):
ifisinstance(ary,list):
ifisinstance(ary[0],list):
forelinary:
miterator(el,mapper)
else:
ary[0],ary[1]=mapper(ary[0],ary[1])
deflogic(...):
other_parameter=....
coordinates=get_coordinates(..)
miterator(coordinates,transform)#??????
然后问题就出来了,我怎么把other_parameter传到transform里面?
所以我希望最好通过generator方式:
defxgenerator(ary):
ifxx:
...
yield(x,y)
然后我就可以通过这种方式调用:
deflogic(...):
other_parameter=....
coordinates=get_coordinates(..)
forx,yinxgenerator(coordinates):
transform(x,y,other_parameter)
但是这个generator我死活写不出来,怎么破?
慕尼黑的夜晚无繁华
浏览 477回答 2
2回答

慕神8447489

这个递归很难写?不过估计Python除了递归应该有更好的方法吧,我也不太懂。顺带帮你把所有的坐标从序列改成元组格式了。仅供参考:#!/usr/bin/envpython3deftransform(el,args):return(el[0]*args[0],el[1]*args[0])defmiterator(arrs,mapper,*args):ifisinstance(arrs[0],int):returnmapper(arrs,args[0])arr=[];forelinarrs:ifisinstance(el[0],int):item=mapper(el,args[0])else:item=miterator(el,mapper,args)arr.append(item)returnarrcoordinates=[[[119,35],[119,35]],[[119,35],[119,35]]]print(miterator(coordinates,transform,100))#[[(11900,3500),(11900,3500)],[(11900,3500),(11900,3500)]]
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答