[英]getting (x,y) coordinates from a list of lists
我遇到一个涉及列表的问题。 我有一个类似的嵌套列表:
A = [ [0,2,3,4], [0,1,1,2] ]
其中第一个列表包含y,第二个列表包含四个不同点的x坐标。 我想获取一个列表:
B = [[0,0], [1,2], [1,3], [2,4]]
每个列表代表一个点。 有没有简单的pythonic方式可以做到这一点,还是必须处理for循环? 预先感谢您,如果已经发布了类似的问题,我们也很抱歉。
这就是zip
函数的作用。
>>> A = [ [0,2,3,4], [0,1,1,2] ]
>>> B = [list(x) for x in zip(*A[::-1])]
>>> B
[[0, 0], [1, 2], [1, 3], [2, 4]]
如果您不需要将元素包含在列表中(例如,元组也可以),则可以缩短为
>>> zip(*A[::-1])
[(0, 0), (1, 2), (1, 3), (2, 4)]
在Python 2和
>>> list(zip(*A[::-1]))
[(0, 0), (1, 2), (1, 3), (2, 4)]
在Python 3中
语法说明:
A[::-1]
反转A
:
>>> A[::-1]
[[0, 1, 1, 2], [0, 2, 3, 4]]
反向列表然后以解压缩形式(请注意*
)传递给zip
函数,这等效于
>>> zip([0, 1, 1, 2], [0, 2, 3, 4])
[(0, 0), (1, 2), (1, 3), (2, 4)]
zip
将从每个可迭代的第一个,第二个,第n个元素构建元组。
编辑:
小改进:
>>> zip(*reversed(A))
[(0, 0), (1, 2), (1, 3), (2, 4)]
应该会更有效地利用内存,因为reversed
提供了一个迭代器, A[::-1]
提供了一个完整的列表,而这并不是我们真正需要的。
numpy也可以用一种可能更具可读性的方式做到这一点:
In [88]: y,x=A;numpy.transpose([x,y]).tolist()
Out[88]: [[0, 0], [1, 2], [1, 3], [2, 4]]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.