2013-03-10 128 views
0

我有一個數組[(126,150),(124,154),(123,145),(123,149)](只是數字的一個樣本,數組太大而不能顯示所有元素),然後我使用imshow將結果繪製到矩陣。我想要的是找到數組的倒數[(150,126),(154,124),(145,123),(149,123)],然後再做另一個imshow在元組列表中反轉元組(Python)

如何反轉數組使其達到我想要做的?

+3

你的問題有'numpy'標籤。你的數組是否存儲爲一個numpy數組?另外,你是怎麼用'imshow'來繪製這個圖的?你能顯示你使用的代碼嗎? – 2013-03-10 12:39:05

回答

1
array = [(126,150),(124,154),(123,145),(123,149)] 
inversed = [(item[1],item[0]) for item in array] 
3
>>> arr = [(126,150),(124,154),(123,145),(123,149)] 
>>> reverseArr = [x[::-1] for x in arr] 
>>> reverseArr 
[(150, 126), (154, 124), (145, 123), (149, 123)] 
>>> 
3

如果你不介意的迭代器:

a = [(126,150),(124,154),(123,145),(123,149)] 

inverse = map(reversed, a) 

還是這裏有幾個選擇,如果你想要的元組:

inverse = map(tuple, map(reversed, a)) 

inverse = map(lambda x: (x[1], x[0]), a) 

inverse = zip(*reversed(zip(*a))) 

從一對夫婦的快速測試我發現列表推導是短列表最有效的方法,而zip方法對長列表最有效。

+0

迭代器+1,懶惰eval FTW – 2013-03-10 12:13:02

+0

不應該是:「如果你不介意iterables」?或者我的理念錯了? – 2013-03-10 12:24:12

+0

@Chris Wesseling元組實際上也是可迭代的。迭代器基本上可以用在'for _in'循環中的任何東西。然而,迭代器是一個具有'next()'方法的特定類型的迭代器。迭代器很懶,爲了節省內存,每個值只能被調用一次(當調用next()時)。 – grc 2013-03-10 12:35:38