Python程序:按姓氏排序姓名列表
在这篇文章中,我们将学习一个 Python 程序,用于按姓氏对姓名列表进行排序。
使用的方法
使用 lambda 和 sorted() 函数
使用 lambda 和 sort() 函数
示例
假设我们已经获取了一个包含字符串元素的**输入列表**。现在,我们将使用上述方法按姓氏的字母顺序(升序)对列表元素进行排序。
输入
Input List: ['sachin tendulkar', 'suresh raina', 'hardik pandya']
输出
Input List after sorting by last names: ['hardik pandya', 'suresh raina', 'sachin tendulkar']
输入列表元素的姓氏依次为 tendulkar、raina、pandya,即**t、r、p**(首字母顺序)。我们将它们按姓氏的字母顺序升序排序,这意味着**p、r、t**(p Lambda 函数,通常称为“**匿名函数**”,与普通的 Python 函数相同,只是它可以**无需名称**地定义。**def** 关键字用于定义普通函数,而**lambda** 关键字用于定义匿名函数。但是,它们仅限于单行表达式。它们与普通函数一样,可以接受多个参数。 **sorted()** 函数返回给定可迭代对象的排序列表。 您可以选择升序或降序。数字按数值排序,而字符串按字母顺序排序。 **iterable** - 它是一个序列,例如元组、列表、字符串等。 **key** - 将执行以确定顺序的函数。默认值为 None。 **reverse** - 布尔表达式。**True** 表示升序排序,**False** 表示降序排序。默认值为 False。 以下是执行所需任务的算法/步骤。 创建一个函数**sortBySurnames()**,该函数通过接受字符串输入列表作为参数来按姓氏对列表进行排序。 创建一个空列表来存储姓名列表。 使用**for 循环**遍历输入列表。 使用**split() 函数**(将字符串拆分为列表。我们可以定义分隔符;默认分隔符是任何空格)将当前单词拆分为单词列表。 使用**append() 函数**(在列表末尾添加元素)将其追加到上述空列表中。 再次修改输入列表为空,以存储结果。 通过使用第二个单词(姓氏)作为键进行排序,遍历新列表的排序结果。 使用**join()** 函数将其转换为字符串,并使用 append() 函数将其追加到输入列表中。 返回按姓氏排序的结果列表。 创建一个变量来存储字符串的**输入列表**,并打印给定列表。 通过将输入列表作为参数,调用上面定义的**sortBySurnames()** 函数。 以下程序使用 lambda 函数和 sorted() 方法返回按输入列表姓氏排序的列表。 执行上述程序后,将生成以下输出。 **sort()** 方法就地对原始列表进行排序。这意味着 sort() 方法会更改列表元素的顺序。 默认情况下,sort() 方法使用小于运算符 (<) 对列表的条目进行排序,即**升序**。换句话说,它优先考虑较小的元素而不是较大的元素。 要从最高到最低(**降序**)排序元素,请在 sort() 方法中使用 reverse=True 参数。 以下程序使用 lambda 函数和 sort() 方法返回按输入列表姓氏排序的列表。 执行上述程序后,将生成以下输出。 本文介绍了两种不同的按姓氏对姓名列表进行排序的方法。我们学习了如何在 sorted() 和 sort() 函数中使用 key 参数根据第 n 个单词或字符进行排序。此外,我们还学习了如何使用 join() 函数连接列表并将其转换为字符串。方法 1:使用 lambda 和 sorted() 函数
Lambda 函数
语法
lambda arguments: expression
sorted() 函数
语法
sorted(iterable, key=key, reverse=reverse)
参数
算法(步骤)
示例
# creating a function that sorts the list by the last name
# by accepting the input list of strings as an argument
def sortBySurnames(inputList):
# storing the list of names
newList = []
# traversing through an input list
for i in inputList:
# splitting the current word into the list of words and
# appending into an above created empty list
newList.append(i.split())
# making the input list empty again
inputList = []
# Traversing in the sorted of the new list by sorting with key as second word(lastname)
for i in sorted(newList, key=lambda k: k[-1]):
# converting to a string using join() and appending it to input list
inputList.append(' '.join(i))
# returning the sorted list by last names
return inputList
# input list of names
inputList = ['sachin tendulkar', 'suresh raina', 'hardik pandya']
# printing input list
print('Input List:', inputList)
# calling the sortBySurnames() function by passing the input list as argument
print('Input List after sorting by last names:\n', sortBySurnames(inputList))
输出
Input List: ['sachin tendulkar', 'suresh raina', 'hardik pandya']
Input List after sorting by last names:
['hardik pandya', 'suresh raina', 'sachin tendulkar']
方法 2:使用 lambda 和 sort() 函数
sort() 方法
list.sort(reverse=True)
示例
# creating a function that sorts the input list by surnames
# by accepting the list as an argument
def sortBySurnames(inputList):
# Splitting the input list and sorting with the key as the second word
inputList.sort(key=lambda k: k.split()[-1])
# returning the sorted list by last names
return inputList
# input list of names
inputList = ['sachin tendulkar', 'suresh raina', 'hardik pandya']
# printing input list
print('Input List:', inputList)
# calling the sortBySurnames() function bypassing the input list as an argument
print('Input List after sorting by last names:\n', sortBySurnames(inputList))
输出
Input List: ['sachin tendulkar', 'suresh raina', 'hardik pandya']
Input List after sorting by last names:
['hardik pandya', 'suresh raina', 'sachin tendulkar']
结论