Python中排序函数的坑
今天尝试写了一个简单的python排序函数,发现排序结果和排序前相比一直没有什么变化,仔细查了一下别人写的函数和我的差别,发现python还是和c++里面有一些差异。
def cmp(lhs, rhs): # sort camera parameters
"""
assert camera2world input
priority: x>y>z;
# not return True/False, return -1/1/0
"""
if lhs["rot_mat"][0][3] < rhs["rot_mat"][0][3]: # x
return -1 #True
elif lhs["rot_mat"][0][3] > rhs["rot_mat"][0][3]:
return 1 #False
elif lhs["rot_mat"][1][3] < rhs["rot_mat"][1][3]: # y
return -1 #True
elif lhs["rot_mat"][1][3] > rhs["rot_mat"][1][3]:
return 1 #False
elif lhs["rot_mat"][2][3] < rhs["rot_mat"][2][3]: # z
return -1 #True
elif lhs["rot_mat"][2][3] > rhs["rot_mat"][2][3]:
return 1 #False
else:
return 0 #False
# 使用这个排序函数
datadict["frames"].sort(key=cmp_to_key(cmp))
上面我写的代码中如果return的是True/False,这个cmp函数完全没起作用,只有返回-1,1,0这种带有符号的数字才有用。
我记得C++中的排序代码一般用的是true/false,但是在Python中使用带符号数字来表示大小关系,Python中int(True)=1, int(False)=0,所以不管实际序列中的大小关系如何,False/True都是非负数,排序前后结果都不会有差异。