这是我得到错误的长 python 代码的一部分:
m = Basemap(...)
lons = ...
lats = ...
x, y = m( lons, lats )
xy = zip(x,y)
print('xy=',xy)
poly = Polygon( xy, facecolor='none', edgecolor=linecolor )
output:
..\site-packages\matplotlib\patches.py", line 1070, in set_xy
if len(xy) and (xy[0] != xy[-1]).any():
TypeError: len() of unsized object
Matplotlib:问题在于 len(xy) 或 (xy) 是不可接受的。
因为该代码包含许多变量,所以我可以制作的简短可重现代码(通过打印(x,y)):
x,y= [105, 98, 98, 105], [-5, -5, 6, 6]
xy = zip(x,y)
len(xy)
error: TypeError: object of type 'zip' has no len()
有什么建议可以解决这个问题吗?
回答1
zip
函数返回一种特殊类型的 zip 对象,而不是列表。要获取列表类型,您需要执行 list(zip(x, y))
>>> x,y= [105, 98, 98, 105], [-5, -5, 6, 6]
>>> xy = zip(x,y)
>>> xy
<zip object at 0x100eaf280>
>>> xy = list(zip(x, y))
>>> xy
[(105, -5), (98, -5), (98, 6), (105, 6)]
>>> len(xy)
4