Пропуск стоимости одного элемента не экономит время, если это означает выполнение копирования для других элементов n - 1
. req[1:]
делает совершенно новый list
, в котором пропущен первый элемент, а для достаточно большого req
стоимость значительно перевесит фиксированную стоимость тестирования одного дополнительного значения.
Вероятно, не стоит пропускать этот элемент, но если вы хотите сделать это без накладных расходов на элемент, вы можете сделать:
def is_prime(n, req):
req = iter(req) # Convert to iterator
next(req, None) # Skip first element, if any
for i in req: # Iterate remainder with no additional overhead
# Remainder of function unmodified
Вы можете использовать itertools.islice
для достижения аналогичного эффекта с фиксированными накладными расходами памяти:
def is_prime(n, req):
for i in itertools.islice(req, 1, None): # Iterate all but first element
# Remainder of function unmodified
но этот будет иметь небольшое количество накладных расходов на элемент, поскольку итерация всегда будет проходить через объект islice
для получения каждого базового элемента.