Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 根据属性对对象列表进行排序,返回内存地址_Python_List_Sorting_Object_Tuples - Fatal编程技术网

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)