我正在尝试使用matplotlib绘制二维图像,这需要嵌套列表格式的数据点。我有一个非常简洁,惯用的方式来生成这个:
zs = [[cost_at(x, y) for x in x_range] for y in y_range]
plt.contourf(x_range, y_range, zs, 1000)
它适用于小数据。但是,我现在需要完全相同的事情,除了X和Y范围太大,无法使完整的嵌套列表适合内存。在我看来,应该可以使用惰性列表来调用API,希望它们是足够的替代品,假设库通过迭代器访问它们。
除了懒惰列表之外,上面的方法是什么?
在Python中,可以使用生成器表达式创建“惰性列表”:
zs = ((cost_at(x, y) for x in x_range) for y in y_range)
通过使用括号而不是方括号,您可以创建一个嵌套的生成器表达式,它一次提供一个cost_at(x, y)
,而不是一次计算所有这些。