Python编程的兴起使希望学习Python以获得更好的职业机会的人数激增。在阅读《Python基础知识》时,您会发现偶尔在Python中反转字符串会使访问数据更加容易。在本文中,我们将逐步介绍如何使用各种方式在Python中反转列表。
本文将重点介绍以下指针:
使用list.reverse()方法反转列表
Python中的每个列表都有一个内置的reverse()方法,您可以调用此方法以就地反转列表对象的内容。原位反转列表意味着它不会创建现有元素并将其复制到新列表。而是直接修改原始列表对象。
这是一个例子:
范例1:
number_list = [10, 20, 30, 40, 50]
reversed_list = number_list.reverse()
print(reversed_list)
number_list = [10, 20, 30, 40, 50]
reversed_list = number_list.reverse()
print(reversed_list)
输出:
没有
范例2:
string_list = [“One”, “Two”, “Three”, “Four”, “Five”]
reversed_list = string_list.reverse()
print(reversed_list)
输出:
没有
范例3:
def reverse_list(list):
print(‘Old list:’, list)
list.reverse()
print(‘New list:’, list)
number_list = [10, 20, 30, 40, 50]
string_list = [“One”, “Two”, “Three”, “Four”, “Five”]
reverse_list(number_list)
reverse_list(string_list)
输出:
旧列表:[10,20,30,40,50]新列表:[50,40,30,20,10]旧列表:['一个','两个','三个','四个','五个']新清单:['五个','四个','三个','两个','一个']
解释
如您所见,调用reverse()返回'None',但是修改了原始列表对象。这就是开发人员开发Python标准库的方式。
当反转大序列时,reverse()方法会修改序列以节省空间,以节省空间。这样做的副作用是它不返回反向列表,而是返回“无”。
就地逆转既有优点也有缺点。这样做的好处是,由于它可以重新整理列表元素并且不创建新列表,因此它的运行速度非常快,因此可以节省存储反向列表所需的内存。由于它会覆盖原始列表,因此可能是一个缺点。但是,我们可以再次反转列表以使其恢复到原始状态。
语法很简单。这意味着来自另一种语言或背景的初学者或开发人员将发现该代码具有可读性。
使用切片技巧来反转Python列表
Python的切片列表具有引人入胜的功能。您可以在其中使用带有“ [::-1]”的切片功能来生成列表的反向副本。
这是一个例子:
def reverse_list(list):
reversed_list = list[::-1]
print(‘Old list:’, list)
print(‘New list:’, reversed_list)
number_list = [10, 20, 30, 40, 50]
string_list = [“One”, “Two”, “Three”, “Four”, “Five”]
reverse_list(number_list)
reverse_list(string_list)
输出:
旧列表:[10,20,30,40,50]新列表:[50,40,30,20,10]旧列表:['一个','两个','三个','四个','五个']新清单:['五个','四个','三个','两个','一个'
解释
与原位反转相比,它会创建原始列表的浅表副本,从而占用更多内存。创建副本时,它需要更多空间来容纳所有现有元素。
这里要注意的一点是,列表的结构是复制的,而不是列表中包含的对象(即元素)。因此,元件不重复,从而节省空间。同样,仅保存对象地址的结构中的引用会更新。由于可变性适用于列表中包含的元素。如果修改了对象,则该对象也将反映在其他副本中。
切片速度很快。但是,当您遍历代码时,很难理解降低代码的可读性。由于速度很快,因此开发人员有责任根据情况使用适当的选项。
了解使用切片编写的脚本可能很耗时,而且难以可视化。语法很复杂,无法清晰显示其功能。
使用reversed()内置函数创建反向迭代器
reversed()函数将返回一个迭代器,我们可以用它以相反的顺序访问元素。如果要求如此,则需要以相反的顺序访问列表中的单个元素,则可以使用此功能。它不会就地反转列表,也不会创建副本。
这是一个例子:
def reverse_list(list):
reversed_list = []
for o in reversed(list):
reversed_list.append(o)
print(‘Old list:’, list)
print(‘New list:’, reversed_list)
number_list = [10, 20, 30, 40, 50]
string_list = [“One”, “Two”, “Three”, “Four”, “Five”]
reverse_list(number_list)
reverse_list(string_list)
Output:
Old list: [10, 20, 30, 40, 50]
New list: [50, 40, 30, 20, 10]
Old list: [‘One’, ‘Two’, ‘Three’, ‘Four’, ‘Five’]
New list: [‘Five’, ‘Four’, ‘Three’, ‘Two’, ‘One’]
输出:
旧列表:[10,20,30,40,50]新列表:[50,40,30,20,10]旧列表:['一个','两个','三个','四个','五个']新清单:['五个','四个','三个','两个','一个']
解释
此函数所做的全部就是,它使用迭代器模式以相反的顺序返回列表的元素,因此可以以相反的顺序遍历列表的元素。
下面展示了使用列表构造函数和反向函数来生成紧凑代码的另一种获取反向列表的方法。
mylist = [1, 2, 3, 4, 5]
list(reversed(mylist))
输出
[5, 4, 3, 2, 1]
解释
列表构造函数以相反的顺序遍历列表。这会一直持续到到达最后一个元素为止。它还以相反的顺序创建原始列表的浅表副本,从而提供所需的输出。
这段代码是可读的,可以很容易地看到。它清晰地显示了背景中发生的事情。迭代器是一个重要的概念,更深入地了解它会有所帮助,但并非每次都必须使用。