如何在 Python 中反转列表

Rayven Esplanada 2023年1月30日 2020年11月24日
  1. 在 Python 中使用 range() 来反转一个列表
  2. 在 Python 中通过 while 循环来反转一个列表
  3. 使用 Python 中的切片运算符反转一个列表
  4. 在 Python 中使用 reversed() 反转列表
如何在 Python 中反转列表

本教程将演示如何在 Python 中用不同的方式来反转一个列表。

列表反转是学习编程时最常遇到的入门编程问题之一。在 Python 中,有几种简单的方法可以反转一个列表。

在 Python 中使用 range() 来反转一个列表

range() 是一个 Python 内置函数,它输出一个数字范围的列表。

range() 的语法

range(start, stop, step)

这个函数有 3 个参数;主要的必要参数是第二个参数 stop,一个表示你要停止的数字。有 2 个可选参数,start 指定你应该从哪里开始计数,step 指定序列的增量。

请注意,stop 的偏移量为 1,因为计数是从 0 开始的。要使用 range() 创建一个停止在 5 的列表,停止值必须是 6。

numbers = list(range(6))
print(numbers)

输出:

[0, 1, 2, 3, 4, 5]

要反转这个列表,你必须指定 startstep 参数。

start 设置为 5,而 step-1,因为我们希望每次都将范围递减 1。stop 参数也应该设置为 -1,因为我们想在 0 停止(因为 stop 的偏移量为 1)。

numbers = list(range(5, -1, -1))
print(numbers)

输出:

[5, 4, 3, 2, 1, 0]

在 Python 中通过 while 循环来反转一个列表

声明一个由 10 个随机整数组成的列表,我们要以反向顺序创建一个新的列表。

numbers = [66, 78, 2, 45, 97, 17, 34, 105, 44, 52]

在列表上使用 while 循环来反向输出。首先,得到列表的大小,并将其减去 1,指向列表的最后一个元素。我们也声明一个空列表来存储前一个列表的新逆向版本。

idx = len(numbers) - 1
newList = []

现在使用 while 循环来迭代并存储新列表中的每个元素,每次迭代都会递减 idx,直到达到 0

while (idx >= 0):
  newList.append(numbers[idx])
  idx = idx - 1

print(newList)

输出:

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

使用 Python 中的切片运算符反转一个列表

如果你不喜欢遍历列表,那么可以使用列表切片运算符将数组索引递减 1。

range() 类似,切片运算符接受三个参数:startstopstep

将前两个参数留空,这样它将覆盖整个数组,并将 step 值设置为 -1,这样它将从数组的末端开始,每次递减 1。

newList = numbers[::-1]
print(newList)

输出:

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

在 Python 中使用 reversed() 反转列表

另一种在 Python 中反转一个列表的简单方法是使用内置函数 reversed()。这个函数接受一个列表作为参数,并返回同一个列表的反转版本的迭代器。

使用上面同样的例子 numbers,使用这个函数反转列表。不要忘了将这个函数放在 list() 函数中,以便将 reversed() 的返回值实际存储到一个列表中。

newList = list(reversed(numbers))
print(newList)

另外,你也可以使 for 循环来遍历反转的列表迭代器,并直接将其存储在 newList 中。

newList = [num for num in reversed(numbers)]
print(newList)

这两种解决方案的输出都是一样的。

[52, 44, 105, 34, 17, 97, 45, 2, 78, 66]

总之,Python 提供了一个简单的方法,通过使用函数 reversed() 来反转一个列表。你也可以通过在 forwhile 循环中手动反转一个列表。Python 也有一个简单的方法,如果你对使用切片运算符很熟悉的话,可以在一行中反转一个列表。

Rayven Esplanada avatar Rayven Esplanada avatar

Skilled in Python, Java, Spring Boot, AngularJS, and Agile Methodologies. Strong engineering professional with a passion for development and always seeking opportunities for personal and career growth. A Technical Writer writing about comprehensive how-to articles, environment set-ups, and technical walkthroughs. Specializes in writing Python, Java, Spring, and SQL articles.

LinkedIn

相关文章 - Python List