sort()及<__main__.xx at xxx>对象类型排序
最近在研究python2.x的项目时,遇到下面一串代码
1 | self.levels.sort(lambda x,y: cmp(x.sequence, y.sequence)) |
因为是python2.x的项目加之对对象类型的了解不够,研究了许久才弄明白该怎么改成python3的写法
最终的写法
1 | levels.sort(key=lambda x:id(x), reverse=True) |
先说python 2到3 的改动
sort()如果要使用lambda,则必须添加
key=lambda
,如果是倒序必须写reverse=True
, 而reverse=False
为升序(默认可不写)cmp(x,y) 比较大小函数 ,在python3被弃用
x.sequence python3中表示list子项的序列号,但此处的目的应该是要获取对象的值,所以应该使用id(obj)
1
2
3
4
5
6
7
8
9
10
11
12#python3
list=['one','two']
print( list[0].sequence )
# 0
# 对象 a = <__main__.Level object at 0x0000015D7FAF8BA8>
print(a)
#<__main__.Level object at 0x0000015D7FAF8BA8>
print(id(a))
# 1842045373040
print( 0x0000015D7FAF8BA8 )
# 1842045373040
sort()使用lambda参数要注意的
看下面的实例:
1 | pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] |
Comments