吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1374|回复: 5
收起左侧

[已解决] 【Python内置函数sorted】练习时遇到一个排序问题

[复制链接]
thepoy 发表于 2019-12-6 11:52
本帖最后由 thepoy 于 2019-12-7 12:30 编辑

要求:
给定一个由若干个随机整数列表,写一个函数,将此列表进行重新排序,奇数从小到大,偶数从大到小,奇数在前,偶数在后。
如:[1,4,7,3,5,2]  -> [1,3,5,7,4,2]

我的代码:

a = [1, 23, 56, 76, 9, 34, 7, 78, 234, 76, 9, 121, 45, 789, 45, 21]
b = sorted(a, key=lambda x: not x % 2 and x * -1 or x)
# b = sorted(a, key=lambda x: x % 2 and x or x * -1)
print(b)

# 结果为
# [234, 78, 76, 76, 56, 34, 1, 7, 9, 9, 21, 23, 45, 45, 121, 789]
# 本想奇数在前,偶数在后,但结果是偶数在前,奇数在后

sorted怎么写key,能题目满足要求?

补充
已发现把排序条件由负数(-x)改为倒数(1/x)就能输出所要结果了,但是原理是什么呢?负数和倒数不应该是一样的吗?

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

行云丶尘伤 发表于 2019-12-6 11:57
看来我不适合学编程···
 楼主| thepoy 发表于 2019-12-6 12:38
我心飞翔1995 发表于 2019-12-6 12:50
本帖最后由 我心飞翔1995 于 2019-12-6 13:34 编辑

最简单的还是奇数偶数分出两个数组,分别排序,最后合到一起
officektv 发表于 2019-12-6 13:41
关键还是要想办法把偶数的key增大到比奇数的key大,比如偶数的key加个大一点的数,比如
[Python] 纯文本查看 复制代码
b = sorted(a, key=lambda x: (not x % 2) and (x * -1 + 2000) or x)

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
thepoy + 1 + 1 明白了

查看全部评分

行云丶尘伤 发表于 2019-12-6 19:52

数学太差~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 22:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表