#python #nested-loops #execution-time
#python #вложенные циклы #время выполнения
Вопрос:
Я получил следующий код на Python :
newArr = []
for i in range(0 , len(customers)):
sum = 1
for j in range(i 1 , len(customers)):
if customers[i] == customers[j] :
sum = 1
sum = (sum/len(customers)) * 100
if sum >= 5:
newArr.append(customers[i])
newArr = set(newArr)
newArr = list(newArr)
newArr.sort()
return newArr
Что я могу сделать, чтобы оптимизировать код и сократить время выполнения?
Комментарии:
1. клиенты — это список, предоставленный пользователем
2. Вы пытаетесь подсчитать количество дубликатов? Попробуйте использовать
set(customers)
, который будет содержать только уникальные значения.3. нет, я хочу посчитать количество клиентов каждого типа @zvone
4. Так почему же ты возвращаешься
newArr
?5. Взгляните на встроенный счетчик python , который в основном предназначен для этого и работает намного быстрее.
Ответ №1:
Насколько я понимаю, как только вы обнаружили, что тип клиента состоит более чем из 5% клиентов, которые вы хотите добавить, а затем вернуть его (отсортированным). Поэтому достаточно посчитать клиентов по типу и вернуть только тех, кто превысил этот порог —
from collections import Counter
customers_counter = Counter(customers)
threshold = int(5 * len(customers)/100 -1)
output_list = []
customers_counter = {k:v for k, v in customers_counter.items() if v > threshold}
return sorted(customers_counter.keys())