【问题标题】: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
    

    【讨论】:

    • 试试这个!谢谢
    • 你的回溯是什么?
    • 无赖:找不到 first_4
    • 请给出完整代码,这里为什么需要first_4?
    猜你喜欢
    • 1970-01-01
    • 2020-02-12
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    • 2017-10-22
    • 2013-08-05
    • 1970-01-01
    相关资源
    最近更新 更多