python - 将排序从 Python2 转换为 Python3
问题描述
我在 Python2 中编写了一个排序,我正在尝试将其转换为 Python3,它要求输入一个密钥并说没有更多的 cmp 函数可用:
test.sort(lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9]))
有什么建议吗?
此致,
解决方案
官方 python 3 文档在本节中解释了将其从 python 2 转换为 3 的正确方法。
原始cmp
功能只是做类似的事情
def cmp(x, y):
if x == y:
return 0
elif x > y:
return 1
else:
return -1
也就是说,它相当于sign(x-y)
,但也支持字符串和其他数据类型。
但是,您的问题是当前的函数sort
不能与具有两个参数的比较函数一起使用,而是与一个key
参数的单个函数一起使用。Python 提供functools.cmp_to_key
了帮助您转换它的功能,因此,请执行类似的操作
test.sort(key = functools.cmp_to_key(
lambda x, y: cmp(x[2],y[2]) or cmp(x[4], y[4]) or cmp(y[9], x[9])
))
推荐阅读
- hadoop - Hadoop:纱线和本地内存使用
- python - tensorflow 训练第一个 epoch 结束时的 ValueError
- firebase - Flutter/Firestore - 带有实时监听器的 Streambuilder 和 Firestore
- c# - 不能在此范围内声明名为的本地或参数,因为该名称在封闭的本地范围中用于定义本地或参数
- javascript - 将客户端脚本重定向到记录类型
- typescript - 在类本身内使用 ES6 类的类型
- spring-boot - 使用 GSON 的 Spring Boot 中的多种日期格式
- visual-studio-code - 我在搞乱 Visual Studio Code,现在所有终端都使用(基本)环境打开
- react-native - async-storage SyntaxError 使用 Babel7 编译时出现意外标识符
- excel - 尝试使用特殊单元格创建动态复制和替换功能