python2 sort函数_python3和python2的CMP sort lambda函数报告的错误,cmpsortlambda,报错

python3对python2真特么不兼容

cmp不行

map不行

lambda不行

sort也不行:TypeError: sort() takes no positional arguments

python2原始代码:

negative_pair_sim.sort(lambda x, y: cmp(x[3], y[3]), reverse=True)

没有耐心的请直接看python3代码:4,解决(最终代码)

1, sort

Traceback (most recent call last):

File "test.py", line 222, in

negative_pair_sim.sort(lambda x, y: cmp(x[3], y[3]), reverse=True)

TypeError: sort() takes no positional arguments

python3中的sort传入参数需要指定为key。即sort函数要加key=

# 按照https://stackoverflow.com/questions/55344116/python-typeerror-sort-takes-no-positional-arguments

negative_pair_sim.sort(key=lambda x, y: cmp(x[3], y[3]), reverse=True)

2,cmp

NameError: name 'cmp' is not defined

原因:python3中没有cmp函数,

解决:按照官方说明手写一个

# 我见过的最好的百度知道回答:

# https://zhidao.baidu.com/question/377763967.html

def cmp_for_py3(a,b):

return (a>b)-(a

注意:网上到处回答的 operator.eq是不能替代cmp的。 operator.eq(a,b)相同返回Ture不同返回False。而python2中自带的cmp函数是相同返回0,a比b大返回1,b比a大返回-1。完全不同。

3,lambda

negative_pair_sim.sort(key=lambda x, y: cmp_for_py3(x[3], y[3]), reverse=True)

到此为止,还是不行:

TypeError: () missing 1 required positional argument: 'y'

用括号扩起

negative_pair_sim.sort(key=lambda (x, y): cmp_for_py3(x[3], y[3]), reverse=True)

也不对!

lambda (x, y): cmp_for_py3(x[3], y[3]):

^

SyntaxError: invalid syntax

原因:python3不允许lambda中输入参数这么解包!要先封装好再传入https://stackoverflow.com/questions/15712210/python-3-2-lambda-syntax-error

4,解决(最终代码)

def cmp_for_py3(a,b):

return (a>b)-(a

# xy = (x,y)

negative_pair_sim.sort(key=lambda xy: cmp_for_py3(xy[0][3], xy[1][3]), reverse=True)

https://www.cnblogs.com/jpr-ok/p/9166337.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值