Python面试必考重点之列表,元组和字典第十关——如果列表元素是对象,对这样的列表排序以及倒序排列的方法
Posted 孤寒者
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python面试必考重点之列表,元组和字典第十关——如果列表元素是对象,对这样的列表排序以及倒序排列的方法相关的知识,希望对你有一定的参考价值。
面试题第十关:
第一部分——考点:
- 类的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面试必考重点之列表,元组和字典第十三关——有哪些数据类型不能作为字典键值的类型/为什么列表和字典类型的值不能作为字典的键值