我有一个有趣的问题,我根本不明白为什么会这样。因此,我试图根据所述对象内的属性对元组列表进行排序,其中元组的第一个元素是对象。因此,我创建了以下代码来测试此功能:
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)]
您获得了内存地址,因为()末尾缺少。
print(e2.get_name) -> <bound method s.get_name of ...
print(e2.get_name()) -> Bill
其他q:
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)
出:fred bill [(Bill,4),(Fred,3)]错误
该False
是因为比较检查对象的元组。如果将其更改为list2[0][0] == e2
,它将返回True
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句