Py学习  »  Python

如何在不删除python中元素索引的情况下删除元素

Ali Kahya • 4 年前 • 561 次点击  

我试图找到“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乘以25.0%

数字是:2乘20.0%

数字是:2乘以15.0%

这部分代码删除了那个索引,所以我当前的索引一个一个地减少。 numbersInPercentage.remove(最大整数)

应该是这样的:

数字是:2乘以25.0%

数字是:3乘20.0%

数字是:4乘15.0%

我的代码发现最大的数字和他们的当前索引非常好,除了删除索引方法杀了我。

我需要分配其他删除了索引的内容,或者我必须删除没有索引值的内容。

附笔: 对不起,我的语言不得体,希望你能理解我的问题。 请有人把我的问题恰当地回答好。谢谢。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/38638
 
561 次点击  
文章 [ 2 ]  |  最新文章 4 年前
abc
Reply   •   1 楼
abc    5 年前

对于前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)
a_guest
Reply   •   2 楼
a_guest    5 年前

你可以用 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

这将返回数字及其计数。如果您想要百分比,那么您可以稍后进行转换。