上一篇文章简单地介绍了什么是 Python 列表和对其增删改操作,生活中我们常常还需要对列表进行排序、反转等操作,贴心的 Python 内置了函数帮助我们实现这些操作,Great!
好了,废话不多说,开始咯~
Python 方法sort()
让你能够较为轻松地对列表进行排序。
sort()语法:list.sort(key=None, reverse=False)
参数:
None
表示直接以默认规则进行排序(单词按首字母、数字按大小排序)。reverse = True
降序, reverse = False
升序(默认)。看到参数解释后你可能会是这样的↓
现在不理解没关系,文中会举例说明。
比如,你有一个汽车列表,并要让其中的汽车按字母顺序排列。你可以这样写:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)
运行这段代码,方法sort()
永久性地修改了列表元素的排列顺序。现在汽车是按字母顺序排列的,再也无法恢复到原来的排列顺序,运行结果如图1-1:
你还可以按与字母排列顺序相反的顺序排列列表元素。只需要向sort()
方法中传递参数reverse = True
即可。代码可以这样写:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)
因为传递了参数reverse = True
,所以运行结果会和图1-1顺序相反,结果如图1-2:
这对元素的排列改变也是永久性的。
以上演示的都是 reverse 参数,接下来讲解 key 参数的使用,使用这个参数我们可以自定义排序规则。
比如,你有一个汽车列表,并要让其中的汽车按最后一个字母排序。你可以这样写:
# elem指列表中的每一个元素
def last(elem):
# 返回字符串最后一个字符作为排序比较键
return elem[-1]
cars = ['bmw', 'audi', 'toyota', 'subaru']
# key参数传入的是带有一个参数的函数名
cars.sort(key=last)
print(cars)
这段代码很有意思,我们自定义了一个排序规则函数last
,当然,函数名可以随便取;有一个参数elem
,事实上这个参数名也可以随便取,指代列表中的每一个元素。last
函数中 return elem[-1]
的含义是返回列表中每个元素的最后一个字母作为比较键。
程序运行时,会把列表cars
中的每一个元素当作参数传入last
中,last
函数返回每个元素的最后一个字母进行排序。结果如图1-3:
要保留列表元素原来的排列顺序,同时又想对列表进行排序,可以使用函数 sorted()
。
函数 sorted()
让你能够按特定顺序显示列表元素,同时不影响它们在列表中的原始排列顺序。
sorted()语法:sorted(iterable, key=None, reverse=False)
参数:
None
表示直接以默认规则进行排序(单词按首字母、数字按大小排序)。reverse = True
降序, reverse = False
升序(默认)。**返回值:**返回一个新的排序列表
还是拿汽车列表举个栗子:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print("原始列表:")
print(cars)
print("\n排序的列表:")
print(sorted(cars))
print("\n原始列表:")
print(cars)
运行这段代码,结果如图2-1:
我们首先打印了原始顺序的列表,在按首字母顺序(升序)对列表进行排序,但这种排序是临时的,不会改变原始列表的顺序,最后我们再次打印原始列表以确认列表元素的排列顺序与以前相同。
和 list.sort()
方法很类似,你还可以按首字母降序排列列表元素,写法也非常相似:
cars = ['bmw', 'audi', 'toyota', 'subaru']
print(sorted(cars, reverse=True))
运行这段代码,你会看到结果如图2-2所示,按首字母降序排序:
看到这里,你可能会想sorted()
方法能不能自定义排序规则呢?
答案是肯定的,而且用法和 list.sort()
还很像。
比如,你想让汽车列表中的汽车按第三个字母进行降序排列,你可以这样写代码:
# elem指列表中的每一个元素
def third(elem):
# 返回元素的第三个字符作为排序比较键
return elem[2]
cars = ['bmw', 'audi', 'toyota', 'subaru']
# key参数传入的是带有一个参数的函数名,reverse=True表示降序排列
print(sorted(cars, key=third, reverse=True))
我们先自定义了一个排序规则函数third
,以列表中元素的第三个字符作为排序的比较键,接下来将这个函数作为参数传给sorted()
,因为是降序排列,所以reverse
要设置为True
。
运行代码,结果如图2-3:
sort()
和sorted()
的区别:
sort()
是应用在 list 上的方法,sorted()
可以对所有可迭代的对象进行排序操作。
list 的 sort()
方法返回的是对已经存在的列表进行操作,而内建函数 sorted()
方法返回的是一个新的 list,而不是在原来的基础上进行的操作。
和排序方法一样,列表反转也有两个方法:list.reverse()
和reversed()
。因为reversed()
方法涉及到迭代器,现在还不适合讲解,所以本文现阶段只讲解 list.reverse()
。
reverse()语法: list.reverse()
没有参数,列表可直接调用
比如,你有一个汽车列表,使用reverse()方法可轻松地反向排列其中的汽车:
cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.reverse()
print(cars)
运行结果如图3-1:
注意: reverse()
是反转列表元素的排列顺序,而且是永久性的。但你可以随时恢复到原来的排序顺序,只要再次调用reverse()
即可。
使用函数 len()
可快速获悉列表的长度。
len()语法: list.len()
返回值: 列表长度
在下面的示例中,列表包含4个元素,因此其长度为4:
注意: Python 计算列表元素个数时从1开始计数,返回的列表长度为实际长度,不会差1。
本文对列表中常见的几个函数进行了简单的讲解,灵活运用Python内置函数对我们编写程序帮助很大,既省时又省力,简单实惠,何乐不为?Python中还有大量的内置函数,以后用到了我再写篇文章进行归纳。作为计算机从业者,在学习时要多想、多练、多总结,这样才能有提高。
如果你在学习过程中有任何疑问,可以关注文章下方↓↓↓的公众号及时与我联系,我们相互讨论,共同学习。
最后,祝你学有所成。