繁体   English   中英

从列表中获取(x,y)坐标

[英]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]提供了一个完整的列表,而这并不是我们真正需要的。

几件事。 首先,这些是与其他编程语言中的ArrayList大致对应的Python列表。 其次,您在结果中要求元组元素,但是您发布的代码具有类型为 list的元素。

使用zip内置功能。

B = list(zip(*A[::-1]))

print(B)

产量

[(0, 0), (2, 1), (3, 1), (4, 2)]

如果需要类型为list的元素,则可以执行以下操作。

B = list(map(list, zip(*A[::-1])))

print(B)

产量

[[0, 0], [2, 1], [3, 1], [4, 2]]

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM