Python面试必考重点之列表,元组和字典第十关——如果列表元素是对象,对这样的列表排序以及倒序排列的方法

Posted 孤寒者

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面试必考重点之列表,元组和字典第十关——如果列表元素是对象,对这样的列表排序以及倒序排列的方法相关的知识,希望对你有一定的参考价值。

面试题第十关:

第一部分——考点:

  1. 类的Magic方法
    2. operator模块
    3. sort方法和sorted函数的key参数

第二部分——面试题:

1.面试题一:如果列表元素是对象,对这样的列表排序有哪些方法

1.面试题二:如果列表元素是对象,进行倒序排列的方法有哪些


第三部分——解析:

面试题一 之 如果列表元素是对象,对这样的列表排序有哪些方法:

第一种:

class MyClass:
	def __init__(self):
		self.value = 0
	def __lt__(self,other):
		return self.value < other.value

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [mya,my2,my3]		
print(a)     #这是要排序的a就是一个对象

a.sort()

print(a[0].value)   # 输出为:10
print(a[1].value)	#		 20
print(a[2].value)	#		 30

第二种:

class MyClass:
	def __init__(self):
		self.value = 0

	def __gt__(self,other):
		return self.value > other.value

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [mya,my2,my3]		
print(a)     #这是要排序的a就是一个对象

a.sort()

print(a[0].value)   # 输出为:10
print(a[1].value)	#		 20
print(a[2].value)	#		 30

第三种:

class MyClass:
	def __init__(self):
		self.value = 0

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [mya,my2,my3]		
print(a)     #这是要排序的a就是一个对象

import operator

a.sort(key = operator.attrgetter('value'))

print(a[0].value)   # 输出为:10
print(a[1].value)	#		 20
print(a[2].value)	#		 30

面试题二 之 如果列表元素是对象,进行倒序排列的方法有哪些:

前两种方法:

把上面两种魔术方法的大于号小于号颠倒

第三种方法:

class MyClass:
	def __init__(self):
		self.value = 0

my1 = MyClass()
my1.value = 20

my2 = MyClass()
my2.value = 10

my3 = MyClass()
my3.value = 30

a = [mya,my2,my3]		
print(a)     #这是要排序的a就是一个对象

import operator

a.sort(key = operator.attrgetter('value'),reverse = True)

print(a[0].value) 
print(a[1].value)
print(a[2].value)

总结:

  • 为类添加__gt__和__lt__方法,可以让该类的实例支持sort方法和sorted函数

  • 通过改变__gt__和__lt__方法的返回值,或者设置sort方法和sorted函数的reverse参数,可以让列表倒序排列

以上是关于Python面试必考重点之列表,元组和字典第十关——如果列表元素是对象,对这样的列表排序以及倒序排列的方法的主要内容,如果未能解决你的问题,请参考以下文章

Python面试必考重点之列表,元组和字典第十二关——如果列表元素是字典序列,如何利用lambda表达式对列表进行升序降序排列

Python面试必考重点之列表,元组和字典第十五关——如何将[i for i in range(20)]变成产生器

Python面试必考重点之列表,元组和字典第十四关——如何使用分片获取产生器类型对象中的部分元素呢

Python面试必考重点之列表,元组和字典第十一关——del和pop都可以用来删除列表元素,那么它们有什么区别呢

Python面试必考重点之列表,元组和字典第十三关——有哪些数据类型不能作为字典键值的类型/为什么列表和字典类型的值不能作为字典的键值

Python面试必考重点之列表,元组和字典第八关——详细描述列表与元组的区别,并举例说明