Python a = a.reverse 会导致列表为空吗?
在解释器中,
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]