Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中反转列表/数组_Python_List_Algorithm_Sorting_Reverse - Fatal编程技术网

在Python中反转列表/数组

在Python中反转列表/数组,python,list,algorithm,sorting,reverse,Python,List,Algorithm,Sorting,Reverse,这四种反转列表的方法有什么区别?哪一个更快 1. list.reverse() list(reversed(list)) list[::-1] while(start < end): list[start], list[end] = list[end], list[start] start += 1 end -= 1` 2. list.reverse() list(reversed(list)) list[::-1] while(start <

这四种反转列表的方法有什么区别?哪一个更快

1.

list.reverse()
list(reversed(list))
list[::-1]
while(start < end):
    list[start], list[end] = list[end], list[start]
    start += 1
    end -= 1`
2.

list.reverse()
list(reversed(list))
list[::-1]
while(start < end):
    list[start], list[end] = list[end], list[start]
    start += 1
    end -= 1`
3.

list.reverse()
list(reversed(list))
list[::-1]
while(start < end):
    list[start], list[end] = list[end], list[start]
    start += 1
    end -= 1`
4.

list.reverse()
list(reversed(list))
list[::-1]
while(start < end):
    list[start], list[end] = list[end], list[start]
    start += 1
    end -= 1`
while(开始<结束):
列表[开始],列表[结束]=列表[结束],列表[开始]
开始+=1
结束-=1`

我将列表变量重命名为
xs
,以避免与函数
list
混淆

xs.reverse()

reversed(xs)
创建了一个迭代器,因此在其上调用
list
将生成一个值已反转的新列表。这里没有突变

xs[:-1]
创建一个新列表。这与
列表(反向(xs))的效果相同。不过,我不确定哪一个性能更好

您编写的过程也在发生变化,因此原始列表
xs
会发生变化

如果性能不是问题,我建议使用非变异版本,因为它会导致令人惊讶的行为。在本例中,
xs[:-1]
是最简单的

list.reverse()
在参考资料上工作。这意味着,无论何时使用它,都会永久更改原始列表

list[::-1]
称为通过切片进行反转。它不会永久更改当前列表的状态。这是非常无效的,因为它会创建您正在使用它的列表的副本,这会占用内存

reversed()
其实没什么不同。它的工作原理类似于切片,但人们通常在for循环中使用它来创建反向迭代器,因此不会创建新列表。如果您使用reversed()打印一个反向列表,您可以这样做,但基本上您将复制一个现有列表,这是非常无效的-但是如果您愿意,您可以执行以下操作:

print(list(reversed(list_name)))
或者,如果要打印此反向列表的元素

print(*reversed(list_name))
我认为最后一个解决方案的工作原理与第一个完全相同,但需要大量代码。您只包含了其中的一部分,但完整的代码如下所示:

    listt = [1,2,3,4,5,6,7]
start = 0
end = len(listt)-1

while(start < end):
    listt[start], listt[end] = listt[end], listt[start]
    start += 1
    end -= 1

print(listt)

还有一种递归方法。1和4修改原始列表。2和3创建新列表,保持原始列表不变。副本基本上解释了所有这些方法,以及各种答案中的更多方法。哦,对不起,我的意思是打印(list(reversed(list_name)),因为它打印出反向列表,但print(*reversed(list))也可以,因为它打印出反向列表的值。我的话在这里改编得不好,真的。[:-1]有它自己的用法。我不知道为什么我写了“相当低效”。也许这句话与前一句话的上下文有关,但我改变了它,保持原样。