【问题标题】:How to remove an element without deleting element's index?如何在不删除元素索引的情况下删除元素?
【发布时间】:2018-08-25 21:21:13
【问题描述】:

我正在尝试在列表中找到“3 个最大的第一个数字”及其索引。

我有一个编号为010 的列表。

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 %

我的代码很好地找到了当前索引中最大的数字,除了删除索引方法会杀死我。

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

【问题讨论】:

    标签: python indexing element


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      对于具有索引的前 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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-10-16
        • 2019-10-23
        • 2014-11-10
        • 1970-01-01
        • 1970-01-01
        • 2021-12-03
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多