鱼C论坛

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

[已解决]想问下各位大佬python的问题

[复制链接]
发表于 2022-1-18 20:42:13 | 显示全部楼层 |阅读模式

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

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

x
如果有一个列表,其中占比超过一半的元素称之为主要元素,那么如何获取一个列表的主要元素呢?
题目给定的列表是:[2, 2, 4, 2, 3, 6, 2]
请根据解题思路进行编程。



nums = [2,2,4,2,3,6,2,2,3,3]
nums.sort()
n = len(nums)
j = 0
for i in nums:
    if n % 2 == 0 :
        if i == nums[n//2] and nums[n//2 - 1 ] == nums[n//2] :
            j += 1
            if j >= n // 2 + 1 :
                print(i, "为主要元素")
                break
    elif n % 2 == 1 :
        if i == nums[n // 2]:
            j += 1
            if j > (n //2):
                print(i,"为主要元素")
                break
    else:
        print("不存在主要元素")
        break



这是我写的代码,输出应该没问题,想问问大佬是否有问题,需要简化吗 如何简化
最佳答案
2022-1-18 21:48:15
  1. nums = [2,2,4,2,3,6,2,2,3,3]
  2. for each in set(nums):
  3.     if nums.count(each) >= len(nums) // 2 + 1:
  4.         print('存在主要元素%s'%each)
  5.         break
  6. else:
  7.     print("不存在主要元素")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-1-18 21:27:05 | 显示全部楼层
试试这个:
  1. arr = [2, 2, 4, 2, 3, 6, 2, 2, 3, 3]
  2. x = list(set(i for i in arr if arr.count(i) >= (len(arr) >> 1)))
  3. print(x)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 21:44:07 | 显示全部楼层
  1. nums = [2, 2, 4, 2, 3, 6, 2]
  2. nums.sort()
  3. n = len(nums) + 1
  4. main_num = nums[0]
  5. count_ = 0
  6. for i in range(len(nums)):
  7.     if main_num != nums[i]:
  8.         if count_ >= n//2:  # main_num满足条件
  9.             continue
  10.         elif i+1 <= n//2:  # 只要该元素第一个出现的下标不超过n的一半,就认为有机会成为主要元素
  11.             main_num = nums[i]
  12.             count_ = 1
  13.         else:
  14.             print("不存在主要元素")
  15.             break
  16.     else:
  17.         count_ += 1
  18. else:
  19.     print(main_num, "是主要元素")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-18 21:48:15 | 显示全部楼层    本楼为最佳答案   
  1. nums = [2,2,4,2,3,6,2,2,3,3]
  2. for each in set(nums):
  3.     if nums.count(each) >= len(nums) // 2 + 1:
  4.         print('存在主要元素%s'%each)
  5.         break
  6. else:
  7.     print("不存在主要元素")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-19 18:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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