鱼C论坛

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

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

[复制链接]
发表于 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))还精简了语句。大概这个感觉

  1. >>> n = [2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
  2. >>> List1 = []
  3. >>> List2 = []
  4. >>> for i in sorted(n, reverse=False):
  5.         if i%2:
  6.                 List2.append(i)
  7.         else:
  8.                 List1.append(i)

  9.                
  10. >>> print(List1)
  11. [2, 6, 10, 18, 34, 36, 62]
  12. >>> print(List2)
  13. [9, 45, 91]
  14. >>>
复制代码


前面是延续你的思路进行改进,不过我看你的题目里,似乎不需要从小到大排序,只要把奇偶分开就行?而且要求用sorted(),那只需要一两句话句话搞定:
  1. n = eval(input())
  2. sorted(n, key=lambda x:x%2==0)
复制代码

结果如下
  1. >>> n = eval(input())
  2. [2, 6, 45, 9, 34, 10, 91, 62, 36, 18]
  3. >>> sorted(n, key=lambda x:x%2==0)
  4. [45, 9, 91, 2, 6, 34, 10, 62, 36, 18]
  5. >>>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-15 03:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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