2011-12-02 88 views
3

在蟒蛇的結果,分配列表操作VAR

我怎麼可以做這樣的事情

a = ["pera", "uva", "maca", "saladamista"] 
b = a.reverse() 

,但沒有反向列表分配給a

+1

'b = a [:]; b.reverse()' – sinan

+1

這段代碼不會「將反向列表賦值給」,它會調用列表的「reverse」方法,它會改變與列表對象「a」相同的列表對象。 [混淆變量和對象](http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html#other-languages-have-variables)很容易但有害。 – delnan

+1

不,因爲使用[:],b是一個**的**副本**,而不是**參考**,所以您在調用b的相反值之後,使其值與a相同。 – bigblind

回答

7

先複製列表,然後反轉副本:

a = ["pera", "uva", "maca", "saladamista"] 
b = a[:] 
b.reverse() 

或使用 「火星笑臉」:

b = a[::-1] 

編輯:如果有人願意時機,在這裏他們是:

In [1]: a = range(100000) 

In [2]: %timeit b = a[:]; b.reverse() 
1000 loops, best of 3: 436 us per loop 

In [3]: %timeit b = a[::-1]   
1000 loops, best of 3: 414 us per loop 

In [4]: %timeit b = list(reversed(a)) 
1000 loops, best of 3: 823 us per loop 
+0

這個「火星笑臉」是如何工作的?你有這個概念的鏈接嗎?謝謝你的答案。我正在尋找簡單的方法來做到這一點..蟒蛇程序員更喜歡和最可讀的方式。 – Pabluez

+1

@Pabluez:看看[這個答案由Alex Martelli](http://stackoverflow.com/questions/3705670/best-way-to-create-a-reversed-list-in-python)。 –

+1

+1火星笑臉快了許多。 :: - 1 –

6

試試這個:

b = list(reversed(a)) 
+1

如果你想把'b'作爲一個列表,應該是'list(reversed(a))'。 –

+0

@SvenMarnach:好的 - 我只注意到了:) –