list.sort()对列表进行排序并替换原始列表,而sorted(list)则返回列表的排序副本,而不改变原始列表。

什么时候一个比另一个更受欢迎? 哪个更有效率?差多少? 执行list.sort()后,列表是否可以恢复到无序状态?


请使用为什么这些列表操作(方法)返回None,而不是结果列表?关闭OP无意中分配了.sort()结果的问题,而不是使用sorted或单独的语句。正确的调试将显示.sort()返回None,此时“为什么?”是剩下的问题。


当前回答

Sorted()返回一个新的排序列表,不影响原始列表。list.sort()对列表进行就地排序,改变列表索引,并返回None(像所有就地操作一样)。

Sorted()适用于任何可迭代对象,而不仅仅是列表。字符串,元组,字典(你会得到键),生成器等,返回一个包含所有元素的列表,排序。

当你想要改变列表时使用list.sort(),当你想要返回一个新的排序对象时使用sorted()。当你想对可迭代对象(而不是列表)排序时,使用sorted()。 对于列表,list.sort()比sorted()更快,因为它不需要创建副本。对于任何其他可迭代对象,您没有选择。 不,您不能检索原始位置。一旦调用list.sort(),原来的顺序就消失了。

其他回答

注意:sort()和sorted()之间最简单的区别是: 不返回任何值,而sorted()返回一个可迭代列表。

Sort()不返回任何值。

sort()方法只是按特定顺序对给定列表中的元素进行排序——升序或降序,而不返回任何值。

sort()方法的语法是:

list.sort(key=..., reverse=...)

或者,也可以使用Python的内置函数sorted() 出于同样的目的。排序函数返回排序列表

 list=sorted(list, key=..., reverse=...)

.sort()函数将new list的值直接存储在list变量中;所以你的第三个问题的答案是否定的。 此外,如果使用sorted(list)来执行此操作,则可以使用它,因为它没有存储在list变量中。有时.sort()方法也会充当函数,或者在其中使用参数。

您必须显式地将sorted(list)的值存储在变量中。

同样对于短数据的处理速度也不会有差别;但对于长列表;你应该直接使用.sort()方法来快速工作;但你将再次面临不可逆转的行动。

Sorted()返回一个新的排序列表,不影响原始列表。list.sort()对列表进行就地排序,改变列表索引,并返回None(像所有就地操作一样)。

Sorted()适用于任何可迭代对象,而不仅仅是列表。字符串,元组,字典(你会得到键),生成器等,返回一个包含所有元素的列表,排序。

当你想要改变列表时使用list.sort(),当你想要返回一个新的排序对象时使用sorted()。当你想对可迭代对象(而不是列表)排序时,使用sorted()。 对于列表,list.sort()比sorted()更快,因为它不需要创建副本。对于任何其他可迭代对象,您没有选择。 不,您不能检索原始位置。一旦调用list.sort(),原来的顺序就消失了。

下面是几个简单的例子,可以看出其中的区别:

请看这里的数字列表:

nums = [1, 9, -3, 4, 8, 5, 7, 14]

当在这个列表上调用sorted时,sorted会生成一个列表的副本。(这意味着您原来的列表将保持不变。)

让我们来看看。

sorted(nums)

返回

[-3, 1, 4, 5, 7, 8, 9, 14]

再看一下数字

nums

我们看到的是原始列表(未修改且未排序)。Sorted没有改变原始的列表

[1, 2, -3, 4, 8, 5, 7, 14]

取相同的nums列表并对其应用排序函数,将改变实际的列表。

让我们来看看。

从我们的nums列表开始,以确保内容仍然相同。

nums

[-3, 1, 4, 5, 7, 8, 9, 14]

nums.sort()

现在原始的nums列表改变了,看看nums,我们看到原始的列表改变了,现在排序了。

nums
[-3, 1, 2, 4, 5, 7, 8, 14]

使用list.sort()你改变的是列表变量,而使用sorted(list)你没有改变变量。

使用排序:

list = [4, 5, 20, 1, 3, 2]
list.sort()
print(list)
print(type(list))
print(type(list.sort())

应该返回这个:

[1, 2, 3, 4, 5, 20]
<class 'NoneType'>

但是使用sorted():

list = [4, 5, 20, 1, 3, 2]
print(sorted(list))
print(list)
print(type(sorted(list)))

应该返回这个:

[1, 2, 3, 4, 5, 20]
[4, 5, 20, 1, 3, 2]
<class 'list'>