Lambda 在 Python 中排序——如何对列表进行 Lambda 排序

该sort()方法和sorted()函数让您可以按升序或降序对列表和元组等可迭代数据进行排序。

它们采用参数,您可以使用这些参数修改它们执行排序的方式。适用于所有版本 32 位 + 64 位 (2023) 的 Windows 7 产品密钥其中一个参数可以是一个函数,甚至是一个 lambda 函数。

在本文中,您将学习如何使用 lambda 函数对列表进行排序。

我们将涵盖的内容

  • 如何在 Python 中对列表进行排序

  • 什么是 Lambda 函数?

  • 如何使用 Lambda 函数对列表进行排序如何使用sort()方法进行 Lambdasort如何使用sorted()函数进行 Lambdasort

  • 结论

如何在 Python 中对列表进行排序

sort()您可以使用方法和函数对列表进行排序sorted()。

该sort()方法有两个参数——key和reverse。可以使用一个函数作为key,但是reverse参数只能取一个Boolean。

如果将反向参数的值指定为True,则该sort()方法将按降序进行排序。如果您指定falseas 的值reverse,则排序将按升序排列。您甚至不需要将 false 指定为值,因为它是默认值。

但是这两个参数都是可选的,所以没有它们该方法仍然可以正常工作:

name_list = ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']
print("Original names:", name_list) # Original names: ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']


name_list.sort()
print("Sorted names:", name_list) # Sorted names: ['Ben Benson', 'John Ann', 'Luigi Austin', 'Zen Jack']


num_list = [34, 11, 35, 89, 37]
print("Original numbers:", num_list) # Original numbers: [34, 11, 35, 89, 37]


num_list.sort()
print("Sorted numbers:", num_list) # Sorted numbers: [11, 34, 35, 37, 89]

sorted()另一方面,该功能也像sort(). 它也接受可选的key和参数,但它接受你想要排序的可迭代对象的强制参数——这使得它非常适合对列表之外的其他可迭代对象进行排序。reverse

该函数的工作原理如下sorted():

name_list = ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']
print("Original names:", name_list) # Original names: ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']


sorted(name_list)
print("Sorted names:", name_list) # Sorted names: ['Ben Benson', 'John Ann', 'Luigi Austin', 'Zen Jack']


num_list = [34, 11, 35, 89, 37]
print("Original numbers:", num_list) # Original numbers: [34, 11, 35, 89, 37]


sorted(num_list)
print("Sorted numbers:", num_list) # Sorted numbers: [11, 34, 35, 37, 89]

正如我之前指出的,您还可以使用该sorted()函数对其他可迭代对象进行排序。这就是我使用sorted()函数对元组进行排序的方式:

name_tuple = ('Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann')
print("Original tuple:", name_tuple) # Original tuple: ('Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann')


sorted(name_tuple)
print("Sorted tuple:", name_tuple) # Sorted tuple: ('Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann')

sort()请记住,我还指出您可以传递一个函数作为方法和函数的关键参数的值sorted()。此函数可以帮助您更果断地确定要对可迭代列表或元组进行排序的方式。

例如,sorted()函数和sort()方法只会按字符串或数字的第一部分排序。但您也可以通过传入一个函数作为关键参数来按第二部分排序。正是使用此功能,您将决定如何对列表或其他可迭代对象进行排序。

lambda 函数是执行此操作的理想选择,因为它需要一个表达式。但在我们深入研究使用 lambda 函数进行排序之前,让我提醒您什么是 lambda 函数。

什么是 Lambda 函数?

lambda 函数是匿名函数——您不使用关键字编写的函数def。一个 lambda 函数可以接受多个参数,但它只能有一个表达式。

既然你没有用关键字定义一个lambda函数def,你怎么调用它?您可以将 lambda 函数分配给变量,然后通过该变量的名称调用它。

在下面的示例中,addNumlambda 函数有 3 个参数并将它们相加:

addNums = lambda a, b, c : a + b + c


res = addNums(4, 12, 4)
print(res) #20

如何使用 Lambda 函数对列表进行排序

sort()您可以使用方法和函数对列表进行“lambda 排序” sorted()。让我们先看看如何使用sort()方法进行 lambda 排序。

如何使用sort()方法进行 Lambdasort

让我们把之前排序的名字按照第二个名字排序。这个 lambda 函数非常适合按名字排序:

lambda name: name.split()[1]

lambda 函数拆分名称并采用名称的第二部分——第二个名称。第一部分是名字,它将是[0]。

您可以将此 lambda 函数作为关键参数传入——按第二个名字对名字进行排序:

name_list = ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']
print("Original list", name_list) # Original list ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']


name_list.sort(key=lambda name: name.split()[1])
print("Sorted name list", name_list) # Sorted name list ['John Ann', 'Luigi Austin', 'Ben Benson', 'Zen Jack']

您可以看到名称按第二个名称的字母顺序排序。John Ann先到,Zen Jack后到。Ann 以 A 开头,Jack 以 J 开头。

如果你愿意,你甚至可以直接传入一个函数。您需要做的是不调用该函数。您必须将其作为对象传入。

name_list = ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']
print("Original list", name_list) # Original list ['Zen Jack', 'Luigi Austin', 'Ben Benson', 'John Ann']


def sort_by_second_name(name):
    return name.split()[1]


name_list.sort(key=sort_by_second_name)
print("Sorted name list", name_list) # Sorted name list ['John Ann', 'Luigi Austin', 'Ben Benson', 'Zen Jack']

现在,让我们根据数字的最后一位对数字进行排序。如果您不知道,如果您对%两个数字使用余数 ( ) 运算符,它会将两个数字相除并返回余数:

print(4 % 2) # returns 0
print(44 % 11) # returns 0
print(104 % 60) # returns 44
print(21 % 2) # returns 1

但是如果你用 10“修改”一个多位数字,它会返回数字的最后一位:

print (44 % 10) # returns 4
print (402 % 10) # returns 2
print (152 % 10) # returns 2
print (1596 % 10) # returns 6

这就是你如何获得第二个数字并根据它对数字进行排序的方法。

以下是我如何使用 lambda 函数对前面示例中的数字进行排序:

num_list = [22, 34, 11, 35, 89, 37, 93, 56, 108]
print('Original Number:', num_list) # Original Number: [22, 34, 11, 35, 89, 37, 93, 56, 108]


num_list.sort(key=lambda num: num % 10)
print('Lambda sorted number:', num_list) # Lambda sorted number: [11, 22, 93, 34, 35, 56, 37, 108, 89]

如您所见,此 lambda 函数 lambda num: num % 10负责根据每个第二位数字对数字进行排序。我将数字传递给 lambda 函数并使用% 10. 此 lambda 函数遍历每个数字并获取它们的最后一位数字。

如果你愿意,你甚至可以直接传入一个函数作为键:

num_list = [22, 34, 11, 35, 89, 37, 93, 56, 108]
print('Original Number:', num_list) # Original Number: [22, 34, 11, 35, 89, 37, 93, 56, 108]


def sort_by_second_num(num):
    return num % 10


num_list.sort(key=sort_by_second_num)
print('Lambda sorted number:', num_list) # Lambda sorted number: [11, 22, 93, 34, 35, 56, 37, 108, 89]

如何使用sorted()函数进行 Lambdasort

在这个例子中,我们将使用一些足球运动员的球衣号码对元组列表进行排序。

sort()和方法之间的唯一区别sorted()是sorted()采用强制迭代而不采用强制迭代sort()。

因此,要使用函数进行 lambda 排序sorted(),您需要做的就是将列表作为可迭代项传入,并将您的 lambda 函数作为键:

 footballers_and_nums = [("Fabregas", 4),("Beckham" ,10),("Yak", 9), ("Lampard", 8), ("Ronaldo", 7), ("Terry", 26), ("Van der Saar", 1), ("Yobo", 2)]


sorted_footballers_and_nums = sorted(footballers_and_nums, key=lambda index : index[1])


print("Original footballers and jersey numbers", footballers_and_nums) # Original footballers and jersey numbers [('Fabregas', 4), ('Beckham', 10), ('Yak', 9), ('Lampard', 8), ('Ronaldo', 7), ('Terry', 26), ('Van der Saar', 1), ('Yobo', 2)]


print("Sorted footballers by jersey numbers:", sorted_footballers_and_nums) # Sorted footballers by jersey numbers: [('Van der Saar', 1), ('Yobo', 2), ('Fabregas', 4), ('Ronaldo', 7), ('Lampard', 8), ('Yak', 9), ('Beckham', 10), ('Terry', 26)]

执行排序的 lambda 函数是 this lambda index : index[1])。lambda 遍历列表中的所有元组,获取第二个索引 ( [1]),并使用它们进行排序。

结论

本文向您展示了如何使用 lambda 函数使用sort()方法和函数对列表进行排序。sorted()

但这还不是全部。我们研究了sort()方法和sorted()函数如何在没有 lambda 函数的情况下独立工作。我还提醒您什么是 lambda 函数,这样您就可以理解我是如何使用 lambda 函数进行排序的。

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2023年12月1日
下一篇 2023年12月1日

相关推荐