Python 通过姓氏对名字列表进行排序

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<r<t)。

方法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()函数将列表连接并将其转换为字符串。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程