老夏学院

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 608|回复: 0

计算列表中出现次数超过该列表长度一半的元素

[复制链接]

304

主题

847

帖子

1082

G币

院长

Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26Rank: 26

积分
1082

院长资深讲师

QQ
发表于 2023-7-11 10:11:09 | 显示全部楼层 |阅读模式
       计算列表中出现次数超过该列表长度一半的元素

    解此题的核心在于需要统计出列表中每个元素出现的次数,统计出现的次数既可以使用列表的count()方法,也可以自定义函数,通过使用“循环+判断”的方法来统计元素出现的次数。

    (1)使用自定义函数。
    解析代码如下:
  1. def moreThanHalfNum(lt):
  2.     # 定义字典,其中,键用于保存列表中的元素,键的值用于保存该元素出现的次数
  3.     dt = {}
  4.     # 用于保存出现次数最多的元素
  5.     maxNum = None
  6.     # 计算列表的长度
  7.     listCount = len(lt)
  8.     # 对列表进行遍历
  9.     for num in lt:
  10.         # 判断当前字典中是否有该元素,如果没有,则将元素作为字典的键存入,并将值设为1,代表第一次出现,如果字典中该元素已经存在,则对该元素在字典中的值做加1操作
  11.         if dt.get(num) is None:
  12.             dt[num] = 1
  13.             # 将列表中第一个元素赋值给maxNum
  14.             if maxNum == None:
  15.                 maxNum = num
  16.         else:
  17.             dt[num] += 1
  18.         # 判断列表中两个元素出现的次数,出现次数多的元素,将其值赋给maxNum
  19.         if num != maxNum and dt.get(num) > dt.get(maxNum):
  20.             maxNum = num
  21.         # 判断当前元素出现的次数是否大于列表长度的一半
  22.         if dt.get(maxNum) > listCount // 2:
  23.             return maxNum
  24.     return '该列表中无符合要求元素!'
  25. print(moreThanHalfNum([5, 5, 4, 3, 5, 3, 2, 5, 5, 5, 5, 7, 7]))
复制代码
    (2)使用count()方法。
    解析代码如下:
  1. def moreThanHalfNum(lt):
  2.     length = len(lt) // 2
  3.     for num in lt:
  4.         if lt.count(num) > length:
  5.             return num
  6.     return '该列表中无符合要求元素!'
  7. print(moreThanHalfNum([5, 5, 4, 3, 5, 3, 2, 5, 5, 5, 5, 7, 7]))
复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|老夏学院 ( 辽ICP备19020546号-1 )

GMT+8, 2024-5-18 19:54 , Processed in 1.065470 second(s), 20 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020.

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