Python 根据属性对对象列表进行排序,返回内存地址
我有一个有趣的问题,我完全不明白为什么会发生这种情况。因此,我尝试对元组列表进行排序,其中元组的第一个元素是一个对象,基于所述对象中的属性。因此,我创建了以下代码来测试此功能:Python 根据属性对对象列表进行排序,返回内存地址,python,list,sorting,object,tuples,Python,List,Sorting,Object,Tuples,我有一个有趣的问题,我完全不明白为什么会发生这种情况。因此,我尝试对元组列表进行排序,其中元组的第一个元素是一个对象,基于所述对象中的属性。因此,我创建了以下代码来测试此功能: class s(object): def __init__(self, name): self._name = name def get_name(self): return self._name def val(x): #This used in place o
class s(object):
def __init__(self, name):
self._name = name
def get_name(self):
return self._name
def val(x):
#This used in place of a lambda
return x[0]._name
e1 = s("Fred")
e2 = s("Bill")
print(e2.get_name())
list1 = [(e1, 3), (e2, 4)]
for n in list1:
print(val(n))
list2 = sorted(list1, key = val)
print(list2)
print(list2[0] == e2)
print(e2.get_name)
print(e2._name)
其输出为:
Bill
Fred
Bill
[(<__main__.s object at 0x0000002AC47D6438>, 4), (<__main__.s object at 0x0000002AC47D6240>, 3)]
False
<bound method s.get_name of <__main__.s object at 0x0000002AC47D6438>>
Bill
您得到了内存地址,因为()在末尾缺失
print(e2.get_name) -> <bound method s.get_name of ...
print(e2.get_name()) -> Bill
输出:
弗雷德
账单
[(法案第4条),(弗雷德第3条)]
假的
False
是因为比较检查对象的元组。如果将其更改为list2[0][0]==e2
,它将返回True请修复问题中代码的缩进。缩进严重的Python无法运行,并且不是一个.Will do,抱歉您想根据元组中的整数排序???根据“s”类对象中的名称attr排序;i、 e按“Fred”和“Bill”排序val函数位于错误位置,因此我需要更改repr以使其正常工作?sorted()用其字符串表示形式替换元组中的对象有什么原因吗?(基本上这可以在不更改repr的情况下完成吗?@benjamingerv在添加repr时,类对象将替换为名称。我认为真正的问题是,为什么排序返回原始对象而不是原始对象名,如e1和E2?我认为这是一个否?我回答说,在前几行中,缺少括号导致了这一点。另一个是元组列表,需要\uu repr\uuu
,去掉它,表示与问题类似。
print(e2.get_name) -> <bound method s.get_name of ...
print(e2.get_name()) -> Bill
class s(object):
def __init__(self, name):
self._name = name
def get_name(self):
return str(self._name)
def __repr__(self):
return str(self._name)
def val(x):
#This used in place of a lambda
return x[0]._name.lower()
e1 = s("Fred")
e2 = s("Bill")
list1 = [(e1, 3), (e2, 4)]
for n in list1:
print(val(n))
list2 = sorted(list1, key = val)
print(list2[0] == e2)