Я пытаюсь найти наиболее эффективный способ построения двух отдельных списков с условием if для вычисления логического значения, возвращаемого функцией.
Содержащий список trunc_keys содержит не более 15 строковых элементов.Тест был выполнен с 10 элементами.
Общая функция:
def is_trunc(key):
# about 10 lines of string manipulation that ultimately returns boolean
Метод 1:
trunc_key_list = [key for key in trunc_keys if is_trunc(key)]
bad_key_list = [key for key in trunc_keys if not is_trunc(key)]
Метод 2:
trunc_key_list = []
bad_key_list = []
[trunc_key_list.append(key) if is_trunc(key) else bad_key_list.append(key) for key in trunc_keys]
Я рассчитал результаты, используя start_time = time.time()
и print("%s" % (time.time() - start_time))
Результаты (в среднем за 20 прогонов)
Метод 1 : 0,000411 Метод 2 : 0,000280
Я ожидал, что метод 1 будет быстрее.Я думал, что списочные понимания были идеальными для такого типа ситуации, избегая необходимости создавать пустые списки.Я нашел этот поток, который, кажется, поддерживает этот результат: Список Python () против скорости построения понимания списка
Я довольно плохо знаком с Python и хотел бы понять это лучше.Разве списки не становятся выгодными при таком маленьком размере списка?Я что-то упускаю?
Я ценю любые идеи, спасибо!