做最好的自己520 发表于 2021-12-11 16:36:21

21讲动动手问题

题目:0. 如果有一个列表,其中占比超过一半的元素称之为主要元素,那么如何获取一个列表的主要元素呢
题目给定的列表是:


自己想的思路:
num =
pert = []

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

n = len(num)

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

if pert > num:   # 新列表的数 > 原列表的数说明该数的,中间元素为主要元素
    print("中间元素为主要元素!")
else:
    print("不存在主要元素T_T")


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

疑惑:为什么索引会超出范围?,需要怎么样修改?

傻眼貓咪 发表于 2021-12-11 16:36:22

nums =
max = 0
elem = None
for i in nums:
   if nums.count(i) > max:
      elem = i
      max = nums.count(i)
print(f"主要元素是:{elem}")

傻眼貓咪 发表于 2021-12-11 16:58:16

最优化代码:nums =
print(f"主要元素是:{max({key: nums.count(key) for key in set(nums)}, key = {key: nums.count(key) for key in set(nums)}.get)}")

做最好的自己520 发表于 2021-12-11 19:08:20

傻眼貓咪 发表于 2021-12-11 16:52


懂了,谢谢啦

傻眼貓咪 发表于 2021-12-11 19:12:54

{:5_109:}

做最好的自己520 发表于 2021-12-11 19:35:27

傻眼貓咪 发表于 2021-12-11 19:12


脑子短路了{:10_262:},请问如何利用append() 与 remove() 两个列表对象,求上面这一题?

傻眼貓咪 发表于 2021-12-11 19:50:25

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

比较不建议在 for 循环里用 pop 或 remove,因为如果一个不谨慎,循环肯定会影响数值(因为每次是以这次位置+1做为下次循环对象,如果 remove 了或 pop 了,位置全部就乱了,除非超级谨慎,并且知道 remove 后真正位置)

做最好的自己520 发表于 2021-12-11 20:17:18

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

是的难怪,搞了半天都,在报错无语了,谢谢
页: [1]
查看完整版本: 21讲动动手问题