如何在元素列表中找到最大的数字, 可能不是唯一的?

共6个回答,已解决, 标签: python arrays python-3.x

这是我的程序

item_no = []
max = 0
for i in range(5):
    input_no = int(input("Enter an item number: "))
    item_no.append(input_no)
for i in item_no:
    if i > max:
       max = i
high = item_no.index(max)
print (item_no[high])

示例输入:[5, 6, 7, 8, 8]

示例输出:8

如何更改我的程序以输出数组中相同的最高数字?

预期产出:[8, 8]

第1个答案(采用)

只要得到最大的使用 max , 然后它 count , 并结合两者在列表理解。

item_no = [5, 6, 7, 8, 8]

max_no = max(item_no)
highest = [max_no for _ in range(item_no.count(max_no))]
print(highest)  # -> [8, 8]

请注意, 这将返回单个项目的列表, 以防您的最大值只出现一次。


更接近当前编程风格的解决方案如下:

item_no = [5, 6, 7, 8, 8]
max_no = 0  # Note 1
for i in item_no:
    if i > max_no:
        max_no = i
        high = [i]
    elif i == max_no:
        high.append(i)

与上述结果相同, 当然。

笔记

  1. 我假设您所处理的只是 N * (1, 2,...)数字。如果不是这种情况, -math.inf 则应改为使用初始化。

请注意, 第二个代码段的效率低于第一个代码段的效率相当大。Python 允许您比这些显式的、类似于 fortrand 的循环更高效, 当您正确使用它时, 它本身也会更有效。

第2个答案

您可以做得更短:

item_no = [5, 6, 7, 8, 8]
#compute once - use many
max_item = max(item_no)
print(item_no.count(max_item) * [max_item])

输出:

[8, 8]
第3个答案

您可以 list 使用理解的任务, 按照以下方式:

numbers = [5, 6, 7, 8, 8]
maxnumbers = [i for i in numbers if i==max(numbers)]
print(*maxnumbers,sep=',')

输出:

8,8

*运算符中 print 用于解包值, sep 用于通知 print 要使用的分离器: , 在这种情况下。

编辑: 如果你想获得最大价值的指数, max 并且只拨打一次电话, 那么就执行以下操作:

numbers = [5, 6, 7, 8, 8]
biggest = max(numbers)
positions = [inx for inx,i in enumerate(numbers) if i==biggest]
print(*positions,sep=',')

输出:

3,4

正如您可能会检查 numbers[3] 等于 biggestnumbers[4] 等于 biggest

第4个答案
  1. 计算最大数字的出现

  2. 遍历列表以打印计数 (1) 范围的最大数字

因此:

item_no = [5, 6, 7, 8, 8]
counter = item_no.count(max(item_no))      # 2
print([max(item_no) for x in range(counter)])

输出:

[8, 8]
第5个答案

此问题可以通过查找等于最大值的项在一行中解决: 提高 var Mvalue = max 中的性能存储最大值 (项 _ no)[i for i in item_no if i==Mvalue]

第6个答案

我认为这将是更好的, 如果我们 max 评估在数组和它 count 在一个迭代

def maxs(iterable):
    max = None
    count = 0
    for index, value in enumerate(iterable):
        if index == 0 or value >= max:
            if value != max:
                count = 0
            max = value
            count += 1
    return count * [max]


print (maxs([5, 6, 7, 8, 8]))   # [8, 8]
print (maxs([3, 2, 4, 5, 1, 2, 4, 5, 2, 5, 0])) # [5, 5, 5]
print (maxs([])) # []

给它一个尝试!!

相关问题

通过随机抽样其他列数据创建新列 如何使用熊猫获得包括每一个组合的计数 如何有效地展开矩阵的值与小块? "注意: 未定义的变量"、"注意: 未定义的索引" 和 "注意: 未定义的偏移量" 使用 PHP 删除数字数组中的所有重复数字 [重复] 使用数组中的键获取最小值 是否有任何巨无意思的方法来查找阵列中特定元组元素的平均值? 如何在元素列表中找到最大的数字, 可能不是唯一的? 如何以 Pythonic 的方式向上移动 n 个目录?