thepoy 发表于 2019-12-6 11:52

【Python内置函数sorted】练习时遇到一个排序问题

本帖最后由 thepoy 于 2019-12-7 12:30 编辑

**要求:**
      给定一个由若干个随机整数列表,写一个函数,将此列表进行重新排序,奇数从小到大,偶数从大到小,奇数在前,偶数在后。
                              如:->
                              
**我的代码:**
```python
a =
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)


# 结果为
#
# 本想奇数在前,偶数在后,但结果是偶数在前,奇数在后
```

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

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

行云丶尘伤 发表于 2019-12-6 11:57

看来我不适合学编程···

thepoy 发表于 2019-12-6 12:38

行云丶尘伤 发表于 2019-12-6 11:57
看来我不适合学编程···

此话怎讲

我心飞翔1995 发表于 2019-12-6 12:50

本帖最后由 我心飞翔1995 于 2019-12-6 13:34 编辑

最简单的还是奇数偶数分出两个数组,分别排序,最后合到一起

officektv 发表于 2019-12-6 13:41

关键还是要想办法把偶数的key增大到比奇数的key大,比如偶数的key加个大一点的数,比如
b = sorted(a, key=lambda x: (not x % 2) and (x * -1 + 2000) or x)

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

thepoy 发表于 2019-12-6 12:38
此话怎讲

数学太差~
页: [1]
查看完整版本: 【Python内置函数sorted】练习时遇到一个排序问题