Python 按属性对自定义对象的元组进行排序

Python 按属性对自定义对象的元组进行排序

现在让我们深入了解Python中的自定义对象。我们知道Python为我们提供了许多预定义的数据类型,可以用来存储各种类型的数据。但是有时我们必须定义自定义数据类型,用于存储无法由内置数据类型表示的数据。

为此,Python为我们提供了“类”,这些类可以帮助我们自定义和创建适合我们需要的数据类型。一个类可以拥有数据和用于实现某些行为的功能。在Python中实现一个类的示例如下所示−

class TempClass:
   self.name = ""
   self.age = 0

上面是一个以“TempClass”命名的类的示例,该类存储名称和年龄,其默认值分别为“”和0。我们使用self来定义我们正在访问类的特定实例的值,点“.”操作符用于访问类的元素。

现在我们知道了Python中的自定义对象是什么,接下来我们将看看什么是自定义对象的元组。当一个元组由所有元素都是自定义对象(类实例)组成时,我们认为我们有一个自定义对象的元组。

对于下面的示例,我们将考虑一个具有名称和年龄作为其数据成员的类。我们将创建一个仅包含此类对象的元组。

使用sort()函数

sort()函数是一种内建的Python函数,它以列表、映射、集合或元组的名称作为参数,并对数据结构进行排序。

要使用sort函数对元组进行排序,我们必须使用类型转换。方法是将类对象存储在未排序的元组中,然后使用此元组创建一个名字的列表并对其进行排序。使用这个排序后的名字列表来对整个元组按姓名进行排序。

步骤

步骤1 - 获取元组中的元素数作为用户输入

步骤2 - 使用for循环来存储所需的对象数量,在每次迭代中输入名称和年龄,并将一个具有输入值作为其数据元素的类对象存储起来。

步骤3 - 创建一个名为sortedNames的列表,并遍历unsortedTuple,将每个对象的名称元素存储在sortedNames列表中

步骤4 - 在sortedNames列表上使用sort函数,现在我们有一个包含按姓名排序的名称的列表

步骤5 - 创建一个名为sortedTuple的排序后的元组,使用for循环遍历sortedNames列表

步骤6 - 使用另一个嵌套的for循环遍历unsortedTuple

步骤7 - 检查元组的当前对象的名称部分是否与sortedNames列表中的名称相同

步骤8 - 如果是,则将当前对象存储在sortedTuple列表中并跳出内部循环

步骤9 - 如果不是,则继续下一个未排序的元组对象

步骤10 - 打印sortedTuple的元素

示例

让我们看一个示例 –

class MyTuple:
   def __init__(self, name, age) -> None:
      self.name = name
      self.age = age
unsortedTuple =( MyTuple("Vijay",23) , MyTuple("Aman",27), MyTuple("Aastha",21) )
print("Tuple before sorting by names are : ")
for person in unsortedTuple:
   print(f"Name : {person.name} Age : {person.age}")
sortedTuple = sorted(unsortedTuple, key= lambda person: person.name)
print("Tuple after sorting by names are : ")
for person in sortedTuple:
   print(f"Name : {person.name} Age : {person.age}")

输出

Tuple before sorting by names are :
Name : Raj Age : 23
Name : Aman Age : 21
Name : Suraj Age : 26
Tuple after sorting by names are :
Name : Aman Age : 21
Name : Raj Age : 23
Name : Suraj Age : 26

使用key属性的sorted()方法

或者,我们也可以使用Python内置的sorted方法,通过key属性对元组进行排序。

该函数返回指定可迭代对象的已排序列表。key属性接受一个函数,通常是一个lambda函数,并基于这些键对可迭代对象进行排序。

示例

让我们来看一个示例 –

class MyTuple:
   def __init__(self, name, age) -> None:
      self.name = name
      self.age = age
unsortedTuple =( MyTuple("Vijay",23) , MyTuple("Aman",27), MyTuple("Aastha",21) )
print("Tuple before sorting by names are : ")
for person in unsortedTuple:
   print(f"Name : {person.name} Age : {person.age}")
sortedTuple = sorted(unsortedTuple, key= lambda person: person.name)
print("Tuple after sorting by names are : ")
for person in sortedTuple:
   print(f"Name : {person.name} Age : {person.age}")

输出

Tuple before sorting by names are :
Name : Vijay Age : 23
Name : Aman Age : 27
Name : Aastha Age : 21
Tuple after sorting by names are :
Name : Aastha Age : 21
Name : Aman Age : 27
Name : Vijay Age : 23

结论

在本文中,我们了解了Python中的自定义对象是什么,以及如何使用类来实现它。我们还了解了如何创建自定义对象的元组,以及如何利用sort和sorted方法按属性对其进行排序。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程