Как удалить элемент без удаления индекса элемента в Python - PullRequest
0 голосов
/ 26 августа 2018

Я пытаюсь найти «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 (large_integer)

Оно должно выглядеть следующим образом:

Число: 2 на 25,0%

Число: 3 на 20,0%

Число: 4 на 15,0%

Мой код очень хорошо находит наибольшее число с их текущим индексом, за исключением удаления метода индекса, убивающего меня.

Мне нужно назначить что-то еще, чтоудалил индекс или я должен удалить без значения индекса.

PS: Извините за мои неподходящие языковые парни, я надеюсь, вы понимаете мою проблему.Не могли бы вы, кто-нибудь правильно сформулировать мой вопрос, пожалуйста.Спасибо.

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Вы можете использовать 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

Возвращает число вместе с его счетом.Если вам нужны проценты, вы можете выполнить преобразование позже.

0 голосов
/ 26 августа 2018

Для первых 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)
...