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

Jus*_*tin 19 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])
Run Code Online (Sandbox Code Playgroud)

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

输出示例: 8

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

预期产量: [8, 8]

Ev.*_*nis 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]
Run Code Online (Sandbox Code Playgroud)

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


与您当前的编程风格更接近的解决方案是:

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)
Run Code Online (Sandbox Code Playgroud)

结果与上述相同。

笔记

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

请注意,第二个代码段的效率比第一个代码段差很多。Python使您比这些显式的,类似于fortran的循环更有效,并且在正确使用它时本身也会更有效。

  • @ user11206537为了获得索引,您可以稍微修改代码,并在`item_no`上使用`enumerate`。遍历时,将索引存储在第二个列表中,就像最大存储量一样。看看[this](https://repl.it/repls/BlaringDarkblueDegree) (3认同)
  • @ user11206537我有点看到了这件事。知道哪种更好的方法仍然有价值。玩得开心! (2认同)

All*_*lan 19

You can do it even shorter:

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])
Run Code Online (Sandbox Code Playgroud)

Output:

[8, 8]
Run Code Online (Sandbox Code Playgroud)


Daw*_*weo 7

您可以通过list以下方式对该任务使用理解:

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

输出:

8,8
Run Code Online (Sandbox Code Playgroud)

*in print中的operator 用于解压缩值,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=',')
Run Code Online (Sandbox Code Playgroud)

输出:

3,4
Run Code Online (Sandbox Code Playgroud)

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

  • 请注意,您的解决方案总共调用“ max”次“ len(numbers)”次。将其存储在列表之外,然后使用它会更好。 (6认同)