龙空技术网

如何更有效地反转 Python 列表?

MikoCody 181

前言:

如今姐妹们对“pythonlist倒序遍历”都比较重视,你们都需要了解一些“pythonlist倒序遍历”的相关资讯。那么小编也在网络上网罗了一些关于“pythonlist倒序遍历””的相关知识,希望我们能喜欢,同学们快快来了解一下吧!

列表是 Python 中最基本和最常用的数据结构之一。列表是可变且有序的对象集合,也可以存储重复值。它们甚至可以用作队列和堆栈(尽管deque可能更有效率)。

列表反转是开发人员在编写 Python 应用程序时执行的一项相当常见的任务。在今天的简短教程中,我们将演示几种不同的反转列表的方法,并讨论哪种方法性能更好,尤其是在处理包含大量数据的列表时。

使用负步长的切片

现在假设我们有以下由一些数值组成的列表:

>>> my_lst = [10, 0, 30, 25, 40, 100, 80]

我们可以使用切片和步长 1 来反转列表。

>>> my_lst_reversed = my_lst[::-1]>>> my_lst_reversed[80, 100, 40, 25, 30, 0, 10]

[::-1]符号基本上做了两件事:

它选择列表的所有元素(第一个:它指定负步长 1,这意味着以相反的顺序检索元素(从末尾到开始)

请注意,仅当您想要创建原始列表的副本以使其包含颠倒顺序的元素时才应使用它。

如果您想就地反转列表(或遍历反转列表的元素),那么有几个其他替代方案比使用负步长切片更有效。

使用 list.reverse() 方法

如果您正在考虑就地反转列表的元素(意味着您实际上不想创建原始列表的另一个副本),那么方法list.reverse()是最有效的方法。

>>> my_lst = [10, 0, 30, 25, 40, 100, 80]>>> my_lst.reverse()>>> my_lst[80, 100, 40, 25, 30, 0, 10]

请注意,由于 reverse() 方法就地发生,我们不需要将操作结果分配回变量。 除了性能影响之外,我还发现这种方法更具可读性,并且清楚地表明列表正在被颠倒。

使用 reversed() 函数

最后,另一种选择是返回反向迭代器的 reversed() 内置函数。

返回一个反向迭代器 iterator。

seq 必须是具有 __reversed__() 方法或支持序列协议的对象(__len__() 方法和 __getitem__() 方法,整数参数从 0 开始)

当涉及到对列表执行向后迭代时,建议使用这种方法。

>>> my_lst = [10, 0, 30, 25, 40, 100, 80]>>> my_lst_reverse_iter = reversed(my_lst)>>> my_lst_reverse_iter<list_reverseiterator object at 0x10afcae20>

如您所见,reversed() 函数返回了一个迭代器,我们可以对其进行循环:

>>> for element in my_lst_reverse_iter:...     print(element)... 80100402530010

请注意,您甚至可以将迭代器转换为列表:

>>> my_lst_reverse = list(reversed(my_lst))>>> my_lst_reverse[80, 100, 40, 25, 30, 0, 10]

但如果这是您的最终目标,那么我个人会选择这种list.reverse()方法。

最后

在今天的简短教程中,我们演示了两种在 Python 中反转对象列表的不同方法。 更具体地说,我们展示了如何使用带步长的切片、列表的 reverse() 方法以及内置的 reversed() Python 方法来做到这一点。

总结一下,

如果您想就地反转列表,请使用list.reverse()如果您想以相反的顺序创建列表的副本,请使用负步长进行切片(即 [::-1])如果您想遍历反向列表,请使用 reversed() 函数

标签: #pythonlist倒序遍历