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方法按属性对其进行排序。