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