2011-04-28 18 views
1

在解釋,Python a = a.reverse使列表爲空?

a = [1,2,3,4] 
a = a.reverse() 

接下來,當我在解釋器中鍵入,我什麼也沒得到。所以它似乎a = a.reverse()生成一個空列表。這是設計嗎?

我在Windows XP上使用python 2.5。

+2

文檔:http://docs.python.org/tutorial/datastructures.html#more-on-lists這裏:http://docs.python.org/library/stdtypes.html#mutable - 次序類型 – 2011-04-28 10:24:52

回答

16

list.reverse()就地修改列表,返回None。但是如果你想保護舊列表,你可以使用reverse()函數,它會返回一個迭代器。這裏

In [1]: a=[1,2,3,4] 

In [2]: print(a.reverse()) 
None 

In [3]: a 
Out[3]: [4, 3, 2, 1] 

In [4]: a=[1,2,3,4] 

In [5]: print(reversed(a)) 
<listreverseiterator object at 0x24e7e50> 

In [6]: list(reversed(a)) 
Out[6]: [4, 3, 2, 1] 

In [7]: a 
Out[7]: [1, 2, 3, 4] 
1

list是一個可變類型,因此list操作就地並返回None

4

reverse就地更改列表,並且不返回任何內容。因此,這是預期的用法:

a = [1, 2, 3, 4] 
a.reverse() 
a  # => [4, 3, 2, 1] 

如果分配的reverse結果回a,將覆蓋所有與無意義的返回值(None),這是你的錯誤來自於努力工作。

1

python列表的內置方法reverse不返回反轉列表。

它顛倒了原有的列表。

所以,如果你想扭轉你的列表,就像在你的代碼,只是做:

a = [1,2,3,4] 
a.reverse() 
0

我想你想要做的是:

a = [1,2,3,4] 
a.reverse() 

a是一個對象,操作就是處理它的數據,所以你不需要再分配它。

0

反向方法會'取回'(如排序)並返回None,因此在調用a.reverse()a已包含結果之後。

0

list.reverse()只是不返回任何東西,因爲它就地改變了列表。看到這個例子:

>>> a = [1,2,3,4] 
>>> a.reverse() 
>>> a 
[4, 3, 2, 1] 

還有就是reversed功能(實際上是一個類型,但此處無關緊要),不改變就地列表,而是返回一個迭代器列表中的項目相反的順序。嘗試:

>>> a = [1,2,3,4] 
>>> a = list(reversed(a)) 
>>> a 
[4, 3, 2, 1] 
相關問題