第
Python中key参数的含义及用法
哈喽大家好,我是咸鱼
我们在使用sorted()或map()函数的时候,都会看到里面有一个key参数
其实这个key参数也存在于其他内置函数中(例如min()、max()等),那么我们今天就来了解一下key参数的含义以及用途吧!
原文:/p/the-key-to-the-key-parameter-in-python
sorted()中的key
我们来看下面这段代码:
some_numbers=[
3.14159,
2.71828,
6.022e23,
6.626e-34,
299_792_458,
6.674e-11,
1.61803,
reordered_numbers=sorted(some_numbers)
print(*reordered_numbers,sep=\n)
reordered_numbers=sorted(some_numbers)这一行代码使用Python的内置函数sorted()对some_numbers列表中的数值进行排序
*reordered_numbers将列表中的元素作为参数传递给print()函数,其中解包操作符*逐个解包列表中的元素,这相当于在括号内直接用逗号分隔每个元素
输出如下:
6.626e-34
6.674e-11
1.61803
2.71828
3.14159
299792458
6.022e+23
如果我们把要排序的元素由【数字】改成【名字(字符串)】,看下会发生什么
some_names=[
Robert,
Ishaan,
Max,
Trevor,
Alexandra,
Albert,
Christine,
reordered_names=sorted(some_names)
print(*reordered_names,sep=\n)
输出如下:
Albert
Alexandra
Christine
Ishaan
Robert
Trevor
可以看到是按照名字的字母顺序进行排序,那如果我们想要根据名称的长度来进行排序呢?
也就是说,我想自己定义排序的规则,这便是key参数的使用场景了
我们可以把自定义的规则用函数的形式表示出来,然后再把函数名作为key参数的值
some_names=[
Robert,
Ishaan,
Max,
Trevor,
Alexandra,
Albert,
Christine,
reordered_names=sorted(some_names,key=len)
print(*reordered_names,sep=\n)
首先列表中some_names的每个元素都作为参数传递给函数len(),然后sorted()使用len()返回的值来确定元素的顺序
输出如下:
Robert
Ishaan
Trevor
Albert
Alexandra
Christine
上面我们说过可以把自定义的规则用函数的形式表示出来,然后再把函数名作为key参数的值
这里的函数可以是:
内置函数
自定义函数
匿名函数(lambda)
下面是一个自定义函数的例子
some_names=[
Robert,
Ishaan,
Max,
Trevor,
Alexandra,
Albert,
Christine,
defget_number_of_a_s(item):
returnitem.lower().count(a)
reordered_names=sorted(some_names,key=get_number_of_a_s)
print(*reordered_names,sep=\n)
函数get_number_of_a_s()将输入字符串转换为小写,并计算字母a的出现次数。该函数返回此计数,用于sorted()确定新列表中元素的顺序。输出如下:
Robert
Trevor
Christine
Albert
Ishaan
Alexandra
由于sorted()通过按升序对数值进行排序来处理数值,因此没有a的名称首先出现,因为.count(a)这些名称的返回0
Max并且是Albert下一个,因为它们包