当返回一个反转的列表时会发生什么?

3
我使用了以下代码来返回一个列表 [1, 2, 3, 4]。
return (list.reverse())

但它并不能返回正确的结果。我不得不使用以下方法:

list.reverse()
return list

为什么会发生这种情况?当我分解我的问题并执行时。
list1 = list.reverse()

在控制台中打印list1时,它只会打印出"list1"。注意:我是一个初学者,正在学习Python。

1
Python 中几乎每个修改对象的方法都会返回 None。这是有意为之的——它意味着每行代码最多只改变一个东西,要么是改变值,要么是赋值给变量,因此通过简单地扫描代码就可以更容易地了解正在发生的事情。 - abarnert
4个回答

7

list.reverse 方法没有返回值。它作用于应用到的列表中的元素(修改列表)。因此,返回其结果将返回 None。以下是教授的说明:

>>>[].reverse() == None
True

如果你想返回一个按照相反顺序排列的新列表,可以这样做:
return list[::-1]

这在Python中被称为切片,用于处理集合。


关于返回none的小提示:这些方法实际上并不返回None。它们不返回任何值。但是在Python中,评估不返回任何值的函数的结果实际上是None

希望这有所帮助!


1
使用newList = list(reversed(oldList))也可以工作,只需添加list()即可,详见下方注释。 - wnnmaw
2
确实如此,但它返回的是一个“reversed”对象,而不是一个全新的列表。 - Paulo Bu
1
@wnnmaw:这有点不同——reversed(oldList)不会返回一个列表,而是返回一个listreverseiterator。你需要使用newList = list(reversed(oldList)) - DSM
@PauloBu 和 DSM,我的错误,那里应该加上一个list(),你们发现得真好。 - wnnmaw

5

这是因为list.reverse()方法是就地反转列表 - 它没有返回反转后的列表。请参见文档


1
使用 reversed
return reversed(list)

它不返回一个列表 @ndpu - Yasasvee
请看我在Paulo Bu的回答下面的评论,你需要用list()将其包围起来。 - wnnmaw
1
@YasasveeAtreya 如果需要的话,你可以使用list(iter)稍后创建列表。使用reversed可减少内存消耗,更好。 - ndpu

1
通常,如果您想返回一个反转的列表,更快的解决方案是:
list.reverse()
return list

你可以这样做。
return reversed(list)

但是这通常会更慢并且使用更多的内存,因为它需要创建一个新对象。

list.reverse() 不返回对象的原因是为了提醒您它修改了原始列表。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接