如何在元素列表中找到最大数量的(可能是唯一的)?

时间:2019-03-18 07:19:36

标签: python arrays python-3.x

这是我的程序,

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

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

示例输出:8

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

预期输出:[8, 8]

7 个答案:

答案 0 :(得分:29)

只需使用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初始化。

请注意,第二个代码段的效率比第一个代码段差很多。与这些显式的,类似于fortran的循环相比,Python可以使您更加高效,而在正确使用它的情况下,Python本身也会更加高效。

答案 1 :(得分:19)

您可以做的更短:

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

输出:

[8, 8]

答案 2 :(得分:7)

对于以下任务,您可以使用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使用哪种分隔符:在这种情况下为,。 / p>

编辑:如果要获取最大价值的索引并仅调用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

答案 3 :(得分: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]

答案 4 :(得分:3)

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

答案 5 :(得分:2)

我认为最好是一次迭代评估数组中的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([])) # []

试试看!

答案 6 :(得分:1)

我认为不可能只用一行就可以找到所有最大数字但是它会有点用,首先我们将按升序对列表进行排序,然后执行此操作

yourList = [7,7,76,4,54,4,5,234,5,56,7,234,34,234,234]

yourList.sort()
ind = yourList.index(max(yourList))
for i in range(ind,ind+(len(yourList)-ind)):
    print(yourList[i])


在这基本上我们将获得第一个最大数字的索引,然后我们将其减去列表的长度,我们将获得要加上多少个索引以获得所有最大数字

还有另一种方法可以做到这一点

lis = [1,2,3,12,12,1,12,3,4,5,6,12, 12]
count = lis.count(max(lis))
loop = [print(max(lis), end=" ") for i in range(count)]

通过这种方式,我们将获得列表中出现了最大数量的次数并打印了多少次