Будь осторожен. Итерируемое значение не обязательно должно быть list
, поэтому разделение списка не следует считать приемлемым решением. Чтобы извлечь нужные элементы, вы можете создать итератор с помощью встроенного iter
:
- Для первых
n
элементов вы можете использовать понимание списка более чем range(n)
.
- Для последних
n
элементов вы можете использовать collections.deque
и установить maxlen=n
.
Вот пример:
from itertools import islice
from collections import deque
def first_and_last_n(x, n=4):
iter_x = iter(x)
first_n = [next(iter_x) for _ in range(n)]
last_n = list(deque(iter_x, maxlen=n))
return first_n + last_n
res = first_and_last_n(range(10))
print(res)
[0, 1, 2, 3, 6, 7, 8, 9]