用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。
这让我想起鲁迅笔下的孔乙己。孔乙己对于茴香豆的茴字的四种写法颇有研究。我不
敢自比孔乙己,这里搜集一些 Python 的茴香豆,以飨各位码农。
在 Python 编程中经常会遇到逆序列表的情况,假设有一个列表:
[1, 2, 3, 4, 5] ,我们需要得到这个列表的逆序列表,即 [5, 4, 3, 2, 1] 。
下面我们先准备源列表:
>>> source_list = [1, 2, 3, 4, 5]
逆序一个列表,老老实实的方法是用一个循环,从源列表的尾部开始,按倒序依次取
一个元素添加到目标列表中,然后打印这个目标列表就可以了。
>>> target_list = list() >>> for index in range(len(source_list)): >>> target_index = - index -1 >>> target_list.append(source_list[target_index]) >>> print(target_list) [5, 4, 3, 2, 1]
当然,如果使用列表推导的方式,上面的内容可以写成一行代码:
>>> print([source_list[(- index -1)] for index in range(len(source_list))]) [5, 4, 3, 2, 1]
当然,上面的方法有一点复杂,我们需要一个简洁一些的方法。根据官方文档,列表
本身带有一个 reverse 方法,其功能是把列表反序。示例如下:
>>> source_list.reverse() >>> print(source_list) [5, 4, 3, 2, 1]
这个方法简单实用,会背单词就可以了。不过要注意,这个方法会改变这个列表本身
的内容。如果我们不想改变其内容,需要先建立一个列表的副本。示例如下:
>>> source_list = [1, 2, 3, 4, 5] >>> target_list = source_list[:] >>> target_list.reverse() >>> print(source_list) >>> print(target_list) [1, 2, 3, 4, 5] [5, 4, 3, 2, 1]
建立副本有点麻烦?那么使用 reserved 类吧,该类是 Pyton 内置的,其功能返回
给定序列的逆序的迭代器。有点拗口,看示例:
>>> print(list(reversed(source_list))) [5, 4, 3, 2, 1]
注意,因为 reversed 返回的是一个迭代器,我们这里使用了 list 类来把迭代器
转换为列表。如果你只是需要知道如何把一个列表逆序,那么知道 reverse 和
reversed 就够了。它们都是 Python 内置的,高效又便捷,用了不吃亏。
下面的内容仅留给学有余力又闲得没事干的朋友。
这里只放出三颗,更多茴香豆,请转到我的自留地:https://dy2018.gitlab.io/