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

方法 1:使用 lambda 和 sorted() 函数

Lambda 函数

Lambda 函数,通常称为“**匿名函数**”,与普通的 Python 函数相同,只是它可以**无需名称**地定义。**def** 关键字用于定义普通函数,而**lambda** 关键字用于定义匿名函数。但是,它们仅限于单行表达式。它们与普通函数一样,可以接受多个参数。

语法

lambda arguments: expression

sorted() 函数

**sorted()** 函数返回给定可迭代对象的排序列表。

您可以选择升序或降序。数字按数值排序,而字符串按字母顺序排序。

语法

sorted(iterable, key=key, reverse=reverse)

参数

  • **iterable** - 它是一个序列,例如元组、列表、字符串等。

  • **key** - 将执行以确定顺序的函数。默认值为 None。

  • **reverse** - 布尔表达式。**True** 表示升序排序,**False** 表示降序排序。默认值为 False。

算法(步骤)

以下是执行所需任务的算法/步骤。

  • 创建一个函数**sortBySurnames()**,该函数通过接受字符串输入列表作为参数来按姓氏对列表进行排序。

  • 创建一个空列表来存储姓名列表。

  • 使用**for 循环**遍历输入列表。

  • 使用**split() 函数**(将字符串拆分为列表。我们可以定义分隔符;默认分隔符是任何空格)将当前单词拆分为单词列表。

  • 使用**append() 函数**(在列表末尾添加元素)将其追加到上述空列表中。

  • 再次修改输入列表为空,以存储结果。

  • 通过使用第二个单词(姓氏)作为键进行排序,遍历新列表的排序结果。

  • 使用**join()** 函数将其转换为字符串,并使用 append() 函数将其追加到输入列表中。

  • 返回按姓氏排序的结果列表。

  • 创建一个变量来存储字符串的**输入列表**,并打印给定列表。

  • 通过将输入列表作为参数,调用上面定义的**sortBySurnames()** 函数。

示例

以下程序使用 lambda 函数和 sorted() 方法返回按输入列表姓氏排序的列表。

# 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() 方法

**sort()** 方法就地对原始列表进行排序。这意味着 sort() 方法会更改列表元素的顺序。

默认情况下,sort() 方法使用小于运算符 (<) 对列表的条目进行排序,即**升序**。换句话说,它优先考虑较小的元素而不是较大的元素。

要从最高到最低(**降序**)排序元素,请在 sort() 方法中使用 reverse=True 参数。

list.sort(reverse=True)

示例

以下程序使用 lambda 函数和 sort() 方法返回按输入列表姓氏排序的列表。

# 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']

结论

本文介绍了两种不同的按姓氏对姓名列表进行排序的方法。我们学习了如何在 sorted() 和 sort() 函数中使用 key 参数根据第 n 个单词或字符进行排序。此外,我们还学习了如何使用 join() 函数连接列表并将其转换为字符串。

更新于: 2023年1月27日

1K+ 阅读量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告