Python a = a.reverse使列表为空?

时间:2011-04-28 10:18:08

标签: python

在翻译处,

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

接下来当我在翻译处打字时,我什么都没得到。所以似乎a = a.reverse()会生成一个空列表。这是设计吗?

我在windows xp上使用python 2.5。

7 个答案:

答案 0 :(得分: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 :(得分:4)

reverse就地更改列表,并且不会返回任何内容。因此,这是预期的用法:

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

如果您将reverse的结果分配回a,您将使用无意义的返回值(None)覆盖其所有辛苦工作,这是您的错误来源。

答案 2 :(得分:1)

list是一种可变类型,因此list操作就位,并返回None

答案 3 :(得分:1)

python上列表的内置方法reverse不会返回反转列表。

它反转了列表。

因此,如果您想要反转列表,就像在代码中一样,只需执行:

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

答案 4 :(得分:0)

我认为你想要做的是:

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

a是一个对象,操作对其数据起作用,因此您无需再次分配它。

答案 5 :(得分:0)

反向方法反向“就地”(如排序)并返回None,因此在调用a.reverse() a之后已经包含结果。

答案 6 :(得分: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]