2013-04-25 44 views
2

我有一個列表:逆名單巨蟒[(160177),(198123)

[(160, 177), (162, 169), (163, 169), (166, 173), (166, 176), (166, 177), (169, 176), (169, 177)]

我想這個名單的倒數,所以就變成:

[(177, 160), (169, 162), (169, 163), (173, 166), (176, 166), (177, 166), (176, 169), (177, 169)]

我認爲你可以做一些像list1[:-1]或類似的東西。

回答

6

在我看來它是清潔明確地扭轉對:

[(snd, fst) for fst, snd in thelist] 
+2

即使它沒有提到..我猜OP可能在現實的情況下 – Lipis 2013-04-25 18:34:26

1

你也可以做到這一點使用mapreversed但喜歡list comprehension based solution 在這種情況下,因爲它只需要一個循環,而在map版本中只需要2個循環。

In [24]: lis=[(160, 177), (162, 169), (163, 169), (166, 173), (166, 176), (166, 177), (169, 176), (169, 177)] 

In [26]: map(tuple,map(reversed,lis)) #use itertools.imap for large lists 
Out[26]: 
[(177, 160), 
(169, 162), 
(169, 163), 
(173, 166), 
(176, 166), 
(177, 166), 
(176, 169), 
(177, 169)] 
+0

更多的項目我正要張貼這一點,但我很害怕,因爲每個人都批評'map'不「Python化」 。這是它的目的。 – squiguy 2013-04-25 18:37:59

+0

@squiguy誰說'map'是unpythonic? map的優勢在於它直接[編譯爲C代碼](http://wiki.python.org/moin/PythonSpeed/PerformanceTips#Loops)。雖然在上述情況下,由於兩個循環,與LC版本相比,它會變得很慢。 – 2013-04-25 18:48:40

+0

「map」不是「unpythonic」,它只是編寫列表理解的前三種方式,它會生成相同的代碼。 'map(f,list)'就是'[f(x)for x in list]',這更清晰。 – 2013-04-25 19:15:57