簡體   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