鱼C论坛

 找回密码
 立即注册
查看: 155|回复: 3

[已解决]python第21讲课后动动手

[复制链接]
发表于 2025-3-31 16:52:53 | 显示全部楼层 |阅读模式

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

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

x
s
[2, 2, 4, 2, 3, 6, 2]
>>> s.sort()
>>> s
[2, 2, 2, 2, 3, 4, 6]
>>> for i in s:
        if i ==s[len(s)//2]:
                print("存在主要元素,是:",i)
                break
        else:
                continue
else:
        print("不存在主要元素")
我这样成功了是凑巧还是逻辑上是正确的
最佳答案
2025-3-31 17:44:32
本帖最后由 jackz007 于 2025-3-31 17:59 编辑

        楼主的成功纯属巧合,所谓主要元素的定义是,其数量(个数)必须占到列表元素数量的一半以上。而楼主的代码,任意给出一个列表,都会给出 "存在主要元素" 的判断,因为这个判断:
  1. for i in s:
  2.     if i == s[len(s) // 2]
复制代码

        只要枚举到列表索引一半的位置,这个判断铁定成立,不信,你可以用 s = [1 , 2 , 3 , 4 , 5 , 6 , 7] 来进行测试。
  1. s = [1,2,3,4,5,6,7]
  2. s . sort()
  3. for i in s :
  4.     if  i == s[len(s) // 2] :
  5.         print('存在主要元素:' , s[len(s) // 2])
  6.         break
  7. else:
  8.     print('不存在主要元素')
复制代码

        正确的代码应该是:
  1. s = [2, 2, 4, 2, 3, 6, 2]
  2. s . sort()
  3. if s . count(s[len(s) // 2]) >= len(s) // 2 :      # 经过排序后,如果存在主元素,则一定会在出现在列表索引居中的位置,只要统计列表中这个元素的数量即可以进行判定。
  4.     print('存在主要元素:' , s[len(s) // 2])
  5. else:
  6.     print('不存在主要元素')
复制代码

        如你所见,根本用不着循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2025-3-31 16:54:06 | 显示全部楼层
关于你写的判断“主要元素”的代码逻辑分析

你写的代码如下:


  1. s.sort()
  2. for i in s:
  3.     if i == s:
  4.         print("存在主要元素,是:", i)
  5.         break
  6.     else:
  7.         continue
  8. else:
  9.     print("不存在主要元素")
复制代码


[b]结论:你的代码能“成功”是凑巧,不是逻辑正确。[/b]

原因分析如下:

  • i == s 这个条件永远不会成立,因为 i 是列表中的一个元素,而 s 是整个列表,它们类型不同,值也不同。
  • 所以 if i == s 这个判断永远是 False,除非你把整个列表 s 中的某个元素也设成了整个列表本身(比如 s.append(s)),这就是你说的“凑巧”。
  • “主要元素”通常是指在一个列表中出现次数超过一半的元素。你现在的代码并没有统计每个元素出现的次数,所以逻辑上是错误的。


正确的做法应该是:

比如我们可以用一个字典统计每个元素出现的次数:


  1. s = [1, 2, 3, 2, 2, 2, 5]
  2. count = {}
  3. for i in s:
  4.     count[i] = count.get(i, 0) + 1

  5. for k, v in count.items():
  6.     if v > len(s) // 2:
  7.         print("存在主要元素,是:", k)
  8.         break
  9. else:
  10.     print("不存在主要元素")
复制代码


这样才是逻辑上正确的判断“主要元素”的方法。

如果你还有其他问题,欢迎继续提问~

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-3-31 17:44:32 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2025-3-31 17:59 编辑

        楼主的成功纯属巧合,所谓主要元素的定义是,其数量(个数)必须占到列表元素数量的一半以上。而楼主的代码,任意给出一个列表,都会给出 "存在主要元素" 的判断,因为这个判断:
  1. for i in s:
  2.     if i == s[len(s) // 2]
复制代码

        只要枚举到列表索引一半的位置,这个判断铁定成立,不信,你可以用 s = [1 , 2 , 3 , 4 , 5 , 6 , 7] 来进行测试。
  1. s = [1,2,3,4,5,6,7]
  2. s . sort()
  3. for i in s :
  4.     if  i == s[len(s) // 2] :
  5.         print('存在主要元素:' , s[len(s) // 2])
  6.         break
  7. else:
  8.     print('不存在主要元素')
复制代码

        正确的代码应该是:
  1. s = [2, 2, 4, 2, 3, 6, 2]
  2. s . sort()
  3. if s . count(s[len(s) // 2]) >= len(s) // 2 :      # 经过排序后,如果存在主元素,则一定会在出现在列表索引居中的位置,只要统计列表中这个元素的数量即可以进行判定。
  4.     print('存在主要元素:' , s[len(s) // 2])
  5. else:
  6.     print('不存在主要元素')
复制代码

        如你所见,根本用不着循环。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2025-4-1 10:02:03 | 显示全部楼层
你这个if i ==s[len(s)//2]逻辑里面相当于if i ==s[3],s[3]是列表里第四个元素也就是2
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-5-12 13:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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