我正尝试在列表中找到“ 3个最大的第一个数字”。
例如;
我有一个数字从0到10的列表。
numbers=[3,5,2,3,3,5,6,2,1,2,3,4,5,6,7]
具有以下数字:
显示2号:5次
显示3号:4次
显示数字4:3次
我有一个计算百分比的列表
numbersInPercentage=[(100/len(numbers))*(numbers).count(0),
(100/len(numbers))*(numbers).count(1),
...
(100/len(numbers))*(numbers).count(10)]
我的算法(代码块),用于查找3个最大的数字
#first biggest
largest_integer = max(numbersInPercentage)
index = numbersInPercentage.index(max(numbersInPercentage))
print('Number is :', index," by ",largest_integer,"%")
numbersInPercentage.remove(largest_integer) # this part killing me
#second biggest
second_largest_integer = max(numbersInPercentage)
index = numbersInPercentage.index(max(numbersInPercentage))
print('Number is :', index," by ",second_largest_integer,"%")
numbersInPercentage.remove(second_largest_integer) # this part killing me
#thirdbiggest
third_largest_integer = max(numbersInPercentage)
index = numbersInPercentage.index(max(numbersInPercentage))
print('Number is :', index," by ",third_largest_integer,"%")
numbersInPercentage.remove(third_largest_integer) # this part killing me
输出如下:
数字是:2 x 25.0%
数字是:2 x 20.0%
数字是:2 x 15.0%
这部分代码删除了该索引,所以我当前的索引一一减少。 numbersInPercentage.remove(largest_integer)
应该看起来像:
数字是:2 x 25.0%
数字是:3 x 20.0%
数字是:4 x 15.0%
除了删除索引方法杀死了我之外,我的代码在当前索引中找到了最大数目。
我需要分配其他删除索引的东西,或者我必须删除没有索引值的东西。
附言: 对不起我那些不当语言的人,希望您能理解我的问题。 请问有人能以适当的方式提出我的问题。谢谢。
答案 0 :(得分:0)
对于具有索引的前3个最大数字,您可以执行以下操作:
numbers=[3,5,2,3,3,5,6,2,1,2,3,4,5,6,7]
res = [(el, numbers.index(el)) for el in sorted(list(set(numbers)), reverse=True)[:3]]
输出:
(7, 14), (6, 6), (5, 1)
答案 1 :(得分:0)
您可以使用collections.Counter
:
>>> from collections import Counter
>>> sorted(Counter(numbers).items(), key=lambda x: x[1], reverse=True)[:3]
[(3, 4), (5, 3), (2, 3)]
^ ^
| |
number
|
count
这将返回数字及其计数。如果需要百分比,可以稍后再进行转换。