鱼C论坛

 找回密码
 立即注册
查看: 1842|回复: 8

[已解决]大家看看我这个代码

[复制链接]
发表于 2021-12-12 21:58:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
为什么我这个代码在list2里没能把偶数删掉
代码如下:
n=eval(input())
m=sorted(n,reverse=False)
k=sorted(n,reverse=False)
for i in m:
    if i%2!=0:
        n=m.remove(i)
        List1=sorted(m,key=lambda x:x%2!=0)
for v in k:
    if v%2==0:
        n=k.remove(v)
        List2=sorted(k,key=lambda x:x%2==0)
print(List1)
print(List2)
print(List1+List2)
最佳答案
2021-12-12 22:09:00
代码:
arr = [2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
res = sorted([i for i in arr if i%2], key = lambda x: arr.index(x)) + sorted([i for i in arr if not i%2], key = lambda x: arr.index(x))
print(res)
输出结果:
[45, 9, 91, 2, 6, 34, 10, 62, 36, 18]
*这题对于初学者相对较难
60113a2786c58abe5f860d7ea7033a0.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-12 22:09:00 | 显示全部楼层    本楼为最佳答案   
代码:
arr = [2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
res = sorted([i for i in arr if i%2], key = lambda x: arr.index(x)) + sorted([i for i in arr if not i%2], key = lambda x: arr.index(x))
print(res)
输出结果:
[45, 9, 91, 2, 6, 34, 10, 62, 36, 18]
*这题对于初学者相对较难
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-12 22:20:38 | 显示全部楼层
傻眼貓咪 发表于 2021-12-12 22:09
代码:输出结果:*这题对于初学者相对较难

为什么这个代码虽然少但是难懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 01:12:05 | 显示全部楼层
d = [eval(x) for x in input() . strip() . split(',')]
print([x for x in d if x % 2] + [x for x in d if not (x % 2)])
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 08:09:30 From FishC Mobile | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-12-13 08:14 编辑
凯什么欧文 发表于 2021-12-12 22:20
为什么这个代码虽然少但是难懂



一般 sorted() 函数排序默认是以数组里的值作为排序的,只是你的题目要求的不是值排序,而是位置排序和奇偶数排序 2 种,我的代码中的 key 就是 sorted() 里面的功能(参数)用于改变排序的方法,我的代码的 key 是以位置作为排序方法(index)所以位置不变,只是奇数变成在左侧,偶数在右则而已。

最重要题目要求一定要用 sorted() 函数,不然其实这题相对较简单

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 12:14:18 | 显示全部楼层
user_data = sorted(eval(input()))
new_data = user_data.copy()
odd_data = []
for i in user_data:
    if i%2:
        odd_data.append(i)
        new_data.remove(i)
print(odd_data+new_data)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-13 13:24:37 From FishC Mobile | 显示全部楼层
兄弟,如果我的代码对你有帮助,请设最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-14 14:27:44 | 显示全部楼层
本帖最后由 gonff 于 2021-12-14 14:51 编辑

首先是问题,
        直接看奇数部分:首先k的迭代是按照k[0], k[1], k[2]...这样的顺序。
                                 当k被移除元素后,后面的元素会顶替前面的序号: 原本的k=[2, 6, 9, 10, 18, 34, 36, 45, 62, 91], 那么k[0]=2, k[1]=6, k[3]=9...  当你执行第一次循环移除i=k[0],也就是2之后,k=[6, 9, 10, 18, 34, 36, 45, 62, 91],此时k[0]=6, k[1]=9, k[2]=10
                                 于是第二次循环,i=k[1],也就是9。6被跳过了。
                                 依次类推,你会发现每遇到一个偶数,迭代的i会跳过一个元素,于是6和18,36因为有2和10,34在前,都被留下来了。其实91也没有被执行,不过本来就是奇数不影响结果。
                                 结果来说,如果有2连续的偶数,就会漏掉一个。
        偶数部分没问题是因为没有两个连一起的奇数,所以只是结果符合,实际执行时还是有几个元素没有被迭代执行。
解决办法,还是用list的append方法,遇到偶数就List1.append(i),遇到奇数就List2.append(i)。这样只需要一个if else就搞定了,也不需要k,只用m即可(也可以把迭代直接写成for i in sorted(n, reverse=False))还精简了语句。大概这个感觉
>>> n = [2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
>>> List1 = []
>>> List2 = []
>>> for i in sorted(n, reverse=False):
        if i%2:
                List2.append(i)
        else:
                List1.append(i)

                
>>> print(List1)
[2, 6, 10, 18, 34, 36, 62]
>>> print(List2)
[9, 45, 91]
>>> 

前面是延续你的思路进行改进,不过我看你的题目里,似乎不需要从小到大排序,只要把奇偶分开就行?而且要求用sorted(),那只需要一两句话句话搞定:
n = eval(input())
sorted(n, key=lambda x:x%2==0)
结果如下
>>> n = eval(input())
[2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
>>> sorted(n, key=lambda x:x%2==0)
[45, 9, 91, 2, 6, 34, 10, 62, 36, 18]
>>> 
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-1 21:06:42 | 显示全部楼层
傻眼貓咪 发表于 2021-12-13 13:24
兄弟,如果我的代码对你有帮助,请设最佳答案

不好意思..
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-12 13:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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