【发布时间】:2011-04-28 18:24:36
【问题描述】:
在口译员处,
a = [1,2,3,4]
a = a.reverse()
接下来,当我在解释器中输入 a 时,我什么也得不到。所以似乎 a = a.reverse() 生成了一个空列表。这是设计的吗?
我在 windows xp 上使用 python 2.5。
【问题讨论】:
标签: python
在口译员处,
a = [1,2,3,4]
a = a.reverse()
接下来,当我在解释器中输入 a 时,我什么也得不到。所以似乎 a = a.reverse() 生成了一个空列表。这是设计的吗?
我在 windows xp 上使用 python 2.5。
【问题讨论】:
标签: python
list.reverse() 就地修改列表,返回无。但是如果你想保护旧列表,你可以使用 reversed() 函数,它返回一个迭代器。
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]
【讨论】:
reverse 就地更改列表,并且不返回任何内容。因此,这是预期的用法:
a = [1, 2, 3, 4]
a.reverse()
a # => [4, 3, 2, 1]
如果您将reverse 的结果分配回a,您将使用无意义的返回值 (None) 覆盖其所有辛勤工作,这就是您的错误的来源。
【讨论】:
list 是一个可变类型,所以list 操作是就地的,并返回None。
【讨论】:
python 上列表的内置方法reverse 不会返回反向列表。
它将列表反转。
所以,如果您想反转您的列表,就像在您的代码中一样,只需执行以下操作:
a = [1,2,3,4]
a.reverse()
【讨论】:
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]
【讨论】:
我想你想做的是:
a = [1,2,3,4]
a.reverse()
a 是一个对象,操作是针对它的数据进行的,所以你不需要再次分配它。
【讨论】:
reverse 方法“原地”执行反向操作(如排序)并返回 None,因此在调用 a.reverse() 之后 a 已经包含结果。
【讨论】: