python - 为什么 sorted 不能正确排序数组?
问题描述
我正在尝试使用 sorted 按其第 4 个值从最大到最小对 2d 数组进行排序,但由于某种原因,它没有正确排序。似乎正确地对两个值进行了排序,但仅此而已。我试图在互联网上查看如何使用 sorted 但似乎这应该正确排序:
stuff = [['A', '15', '23', '5'], ['A', '15', '23', '2'], ['A', '15', '23', '17'], ['A', '15', '23', '16'], ['A', '15', '23', '12']]
stuff = sorted(stuff, key=lambda x: x[3], reverse = True)
print(stuff)
这是我得到的输出: [['A', '15', '23', '5'], ['A', '15', '23', '2'], ['A', ' 15', '23', '17'], ['A', '15', '23', '16'], ['A', '15', '23', '12']]
解决方案
那是因为您的key
函数正在比较字符串值。因此,当它尝试与 比较'2'
时'17'
,它会逐个字符地进行比较,并且由于'2' > '1'
,它认为它具有更大的价值。
stuff
您可以通过在数组第 4 项上使用整数来轻松解决此问题:
stuff = [['A', '15', '23', 5], ['A', '15', '23', 2], ['A', '15', '23', 17], ['A', '15', '23', 16], ['A', '15', '23', 12]]
或者通过调用int
键函数从字符串转换为整数:
stuff = sorted(stuff, key=lambda x: int(x[3]), reverse = True)
推荐阅读
- sql - SQL 中 SaaS 用户的队列分析
- docker - 在 docker compose 中无法访问 Kafka 代理
- mongodb - 缺少与 mongod 服务器的连接
- matlab - 用模运算符除法后如何得到另一部分
- c# - 通过 One.com 发送电子邮件
- spring-boot - YAML 文件的 Kafka Producer SSL 属性
- java - SpringMVC:RequestMapping、GetMapping、PostMapping……有共同的超类吗?
- php - Why session_destroy cannot unset the current session value php
- javascript - 如何在 ReactJS v16.11 中找到父组件名称
- javascript - Reactjs 中的可编辑表