Python 已排序列表上的排序()的运行时?

Python 已排序列表上的排序()的运行时?,python,Python,好奇的是,内置的sorted()函数是否会注意到一个列表已经排序,并在固定时间内返回相同的列表 x = [1, 2, 3, 4, 5] y = sorted(x) 否。它将创建一个新列表,并按已排序的顺序添加现有列表中的值,在您的情况下,这些值已排序。对于长度为n的列表,它将以O(n)的次数遍历整个现有列表。因此,它不会在固定时间内返回列表 而sorted()函数在遍历整个列表之前无法知道列表已排序,这显然不能在固定时间内完成。无法确定列表是否在固定时间内排序,因此不能 理论上,列表可以有一个

好奇的是,内置的
sorted()
函数是否会注意到一个列表已经排序,并在固定时间内返回相同的列表

x = [1, 2, 3, 4, 5]
y = sorted(x)

否。它将创建一个新列表,并按已排序的顺序添加现有列表中的值,在您的情况下,这些值已排序。对于长度为
n
的列表,它将以
O(n)
的次数遍历整个现有列表。因此,它不会在固定时间内返回列表


sorted()
函数在遍历整个列表之前无法知道列表已排序,这显然不能在固定时间内完成。

无法确定列表是否在固定时间内排序,因此不能


理论上,列表可以有一个名为sorted的布尔属性,该属性在每次修改列表时设置为False,在排序时设置为True。对于一般列表类型来说,这是一个非常糟糕的主意。考虑列表[1,4],[6],[7]和[7,6],[4],1]。是否应将其中任何一项视为已排序?哪一个或两者都有?

它应该如何注意这一点?它可以对其进行排序并与原始数据进行比较……准确地说。只是浏览n个数字并不是常数时间。它将是O(n),所以我认为答案必须是否定的。旗帜将走向何方?该死,你比我快。很好的回答:对于一般的紫色列表来说,这是一个糟糕的想法,它可能适用于特定的场景,您可以完全控制列表。这将迫使您在每次以任何方式修改列表(包括插入和排序以及其他修改)时更新布尔标志。这可以通过上下文管理器来实现,上下文管理器可以证明在退出时,布尔值将被设置为正确的值。我仍然认为这需要一个非常具体的场景。