Нарезка итерируемой - функция не работает (python) - PullRequest
0 голосов
/ 05 июля 2018

Мне был задан следующий вопрос:

Создайте новую функцию с именем first_and_last_4. Он примет одну итерацию, но на этот раз он вернет первые четыре и последние четыре элемента как одно значение.

Вот мой код:

def first_and_last_4(x):
    first_4 = x[:4]
    last_4 = x[-4:]
    return (first_4.extend(last_4))

Я также попытался упростить это:

def first_and_last_4(x):
    return x[:4] + x[-4:]

Ошибка :

Облом: не смог найти first_4

Можете ли вы помочь?

Ответы [ 2 ]

0 голосов
/ 05 июля 2018

Будь осторожен. Итерируемое значение не обязательно должно быть 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]
0 голосов
/ 05 июля 2018

Просто попробуйте это:

def first_and_last_4(x):
    return x[:4]+x[-4:] #you had indentation problem here
...