切片可迭代-函数不起作用(python)

时间:2018-07-05 08:26:45

标签: python python-3.x list slice

我已经提出了以下问题:

  

创建一个名为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 :(得分:1)

只需尝试一下:

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

答案 1 :(得分:0)

注意。可迭代的对象不必是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]