for i in range(len(nums)):
if nums[i] % 2 == 0:
new_arr.append(i)
return new_arr В коде идет отбор чётных чисел из списка и добавление их в другой список. Как бы вы его оптимизировали ?
не писал бы на пайтоне
Хз актуально ли: lambda nums: [if x % 2 == 0 for x in nums] Вроде так можно, хотя лябмды в питоне вроде не принято юзать.
При замерах в списковом включении скорость меньше, чем через цикл, так что я использовал цикл и перебор списка по элементам, а не по их индексам.
А вообще самый быстрый вариант получился с использованием pop, я просто удалял нечётные числа из исходного списка
Хз, что значит списковое включение, и разве ты не по индексам перебирал? Но если дрочишь на скорость выполнения, то вроде range(len()) в цикле каждый раз считается
Списковое включение, это когда ты делаешь вот так: [el for el in list ...]
pop(i) для каждого нечётного это O(N^2), он не может быть быстрее на сколько-либо больших длинах
Обычный list comprehension быстрее альтернативных вариантов https://pastebin.com/4kcBMhCi
у меня ситуация обратная
Нужны индексы чётных элементов или сами элементы? Замерять нужно на длинных списках, чтобы данные замера были полезны. Либо списках такого размера, для которого планируется применять функцию
я протупил сначала, нужны индексы
Если нужны индексы, не стоит использовать метод index. Он работает за линейное время
я пробовал range(len), он ещё медленнее
Какая разница, что быстрее на списке из одного элемента
Лучше замерять на длинных списках
Если список из одного элемента (x,) = arr return [x] if x % 2 == 0 else []
Обсуждают сегодня