【发布时间】:2018-10-05 20:27:28
【问题描述】:
我有一个有趣的问题,我完全不明白为什么会这样。因此,我正在尝试根据所述对象中的属性对元组列表进行排序,其中元组的第一个元素是一个对象。因此,我创建了以下代码来测试此功能:
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
我完全不知道为什么在排序后我将属性的内存地址作为我的元组的第一个元素,并且我已经通过 SO 进行了搜索,并且这段代码确实不应该有任何问题,因为它看起来与这方面的许多其他帖子完全相同。任何人都可以在这里帮助我并指出为什么会这样吗?我期望这个输出:
print(list2) #After sorting
OUTPUT:
[(e2, 4), (e1, 3)]
【问题讨论】:
-
请修正问题中代码的缩进。缩进严重的 Python 无法运行,并且不是 minimal reproducible example。
-
会的,道歉
-
你想根据元组中的整数排序???
-
根据“s”类的对象内部的名称attr进行排序;即按“Fred”和“Bill”排序
-
val 函数放错地方
标签: python list sorting object tuples