Как ускорить простой алгоритм, который принимает входные данные от пользователя

#python #performance #for-loop #printing

#python #Производительность #for-цикл #печать

Вопрос:

Мне интересно, как я могу ускорить следующий код. Он принимает входные данные от пользователя и печатает наиболее повторяющийся элемент. Первый ввод — это количество значений, которые пользователь хочет ввести.

 N = int(input())
B=[]
for i in range(N):
    b = (int(input()))
    B.append( (b) )
print(max(set(B), key=B.count)) 
  

Комментарии:

1. Я не могу представить, чтобы человек набирал достаточно чисел, чтобы сделать это медленно. Сколько времени это займет для запуска?

2. Числа могут быть введены роботом, и это могут быть тысячи. Мне это нужно менее 5 секунд.

Ответ №1:

Вы можете использовать collections.Counter

 from collections import Counter

Counter(B).most_common(n=1)[0][0]
  

С помощью сравнения времени:

 from random import randint

B = [randint(0, 25) for _ in range(10000)]

%%timeit
max(set(B), key=B.count)
# 3.89 ms ± 63.4 µs per loop

%%timeit
Counter(B).most_common(n=1)[0][0]
# 434 µs ± 53.8 µs per loop
  

Set vs Counter время выполнения