[英]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.