【问题标题】:Slicing an iterable - Function not working(python)切片可迭代 - 函数不起作用(python)
【发布时间】:2018-12-13 15:46:36
【问题描述】:
有人向我提出以下问题:
创建一个名为 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
你能帮忙吗?
【问题讨论】:
标签:
python
python-3.x
list
slice
【解决方案1】:
小心。可迭代对象不必是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]
【解决方案2】:
试试这个:
def first_and_last_4(x):
return x[:4]+x[-4:] #you had indentation problem here