Python a = a.reverse 会导致列表为空吗?

3 投票
7 回答
3244 浏览
提问于 2025-04-16 16:34

在解释器中,

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

接下来,当我在解释器里输入 a 时,什么也没有显示。所以看起来 a = a.reverse() 这个操作生成了一个空列表。这是故意这样设计的吗?

我在 Windows XP 上使用的是 Python 2.5。

7 个回答

1

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]
5

reverse 是一个用来反转列表的函数,它会直接在原来的列表上进行修改,而不会返回任何东西。所以,正确的用法应该是这样的:

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

如果你把 reverse 的结果再赋值给 a,那么你就会把它之前的所有努力都覆盖掉,因为它返回的是一个没有意义的值(None),这就是你出现错误的原因。

18

list.reverse() 这个方法会直接改变原来的列表,并且不会返回任何东西(返回的是None)。但是,如果你想保留原来的列表不变,可以使用 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]

撰写回答