鱼C论坛

 找回密码
 立即注册
查看: 893|回复: 7

[已解决]21讲动动手问题

[复制链接]
发表于 2021-12-11 16:36:21 | 显示全部楼层 |阅读模式
6鱼币
题目:0. 如果有一个列表,其中占比超过一半的元素称之为主要元素,那么如何获取一个列表的主要元素呢
题目给定的列表是:[2, 2, 4, 2, 3, 6, 2]


自己想的思路:
  1. num = [2,2,4,2,3,6,2]
  2. pert = []

  3. num.sort()   #从小到大排列

  4. n = len(num)

  5. for ag in range(n):
  6.    
  7.     if num[ag] != num[3]:    # ag 的值不等于 num[3]下标的值 执行
  8.         num.remove(num[ag]) # 把当前值从num列表删除
  9.            
  10.     else:                   #等于num[3]的值时
  11.         pert.append(num[ag])    #把当前值添加到penrt,列表内

  12. if pert > num:     # 新列表的数 > 原列表的数说明该数的,中间元素为主要元素
  13.     print("中间元素为主要元素!")
  14. else:
  15.     print("不存在主要元素T_T")
复制代码


运行结果:IndexError: list index out of range(列表索引超出范围)

疑惑:为什么索引会超出范围?,需要怎么样修改?
最佳答案
2021-12-11 16:36:22
  1. nums = [2, 2, 4, 2, 3, 6, 2]
  2. max = 0
  3. elem = None
  4. for i in nums:
  5.    if nums.count(i) > max:
  6.       elem = i
  7.       max = nums.count(i)
  8. print(f"主要元素是:{elem}")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 16:36:22 | 显示全部楼层    本楼为最佳答案   
  1. nums = [2, 2, 4, 2, 3, 6, 2]
  2. max = 0
  3. elem = None
  4. for i in nums:
  5.    if nums.count(i) > max:
  6.       elem = i
  7.       max = nums.count(i)
  8. print(f"主要元素是:{elem}")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 16:58:16 | 显示全部楼层
最优化代码:
  1. nums = [2, 2, 4, 2, 3, 6, 2]
  2. print(f"主要元素是:{max({key: nums.count(key) for key in set(nums)}, key = {key: nums.count(key) for key in set(nums)}.get)}")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 19:08:20 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 19:12:54 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 19:35:27 | 显示全部楼层

脑子短路了,请问如何利用append() 与 remove() 两个列表对象,求上面这一题?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-11 19:50:25 | 显示全部楼层
做最好的自己520 发表于 2021-12-11 19:35
脑子短路了,请问如何利用append() 与 remove() 两个列表对象,求上面这一题?

比较不建议在 for 循环里用 pop 或 remove,因为如果一个不谨慎,循环肯定会影响数值(因为每次是以这次位置+1做为下次循环对象,如果 remove 了或 pop 了,位置全部就乱了,除非超级谨慎,并且知道 remove 后真正位置)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-12-11 20:17:18 | 显示全部楼层
傻眼貓咪 发表于 2021-12-11 19:50
比较不建议在 for 循环里用 pop 或 remove,因为如果一个不谨慎,循环肯定会影响数值(因为每次是以这次 ...

是的难怪,搞了半天都,在报错无语了,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-1 07:12

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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