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