用 Python 编程,使用不同的方法来完成同一个目标,有时候是一件很有意思的事情。 这让我想起鲁迅笔下的孔乙己。孔乙己对于茴香豆的茴字的四种写法颇有研究。我不 敢自比孔乙己,这里搜集一些 Python 的茴香豆,以飨各位码农。
在 Python 编程中经常会遇到逆序列表的情况,假设有一个列表: [1, 2, 3, 4, 5] ,我们需要得到这个列表的逆序列表,即 [5, 4, 3, 2, 1] 。 下面我们先准备源列表:
>>> source_list = [1, 2, 3, 4, 5]
茴香豆一:使用 For 循环
逆序一个列表,老老实实的方法是用一个循环,从源列表的尾部开始,按倒序依次取 一个元素添加到目标列表中,然后打印这个目标列表就可以了。
>>> 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 方法
当然,上面的方法有一点复杂,我们需要一个简洁一些的方法。根据官方文档,列表 本身带有一个 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]
茴香豆三:使用 reversed 类
建立副本有点麻烦?那么使用 reserved 类吧,该类是 Pyton 内置的,其功能返回 给定序列的逆序的迭代器。有点拗口,看示例:
>>> print(list(reversed(source_list)))
[5, 4, 3, 2, 1]
注意,因为 reversed 返回的是一个迭代器,我们这里使用了 list 类来把迭代器 转换为列表。如果你只是需要知道如何把一个列表逆序,那么知道 reverse 和 reversed 就够了。它们都是 Python 内置的,高效又便捷,用了不吃亏。 下面的内容仅留给学有余力又闲得没事干的朋友。
茴香豆四:使用列表切片
使用 Python 的人大概没有不知道列表的。使用列表的,大概没有人不知道列表的 切片的。使用切片,可能有的人会注意到可以这样切片:
>>> print(source_list[::-1])
[5, 4, 3, 2, 1]
茴香豆五:使用 slice 对象
Python 还有一个 slice 对象,可以用类似的手法来逆序列表:
>>> print(source_list[slice(None, None, -1)])
[5, 4, 3, 2, 1]
茴香豆六: 人工智障
现在 Python 最热门的大概是人工智能了,可惜这里暂时还用不上。大道至简,最后 我们给出最直接的人工智障方案:
>>> print([5, 4, 3, 2, 1])
[5, 4, 3, 2, 1]