Я хочу оптимизировать код на python, чтобы сократить время

#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())