不使用内置函数反转列表

新手上路,请多包涵

我正在使用 Python 3.5。

作为问题的一部分,我正在尝试设计一个将列表作为输入并将其还原的函数。因此,如果 x = [a, b, c] 函数将使 x = [c, b, a]

问题是,我不允许使用任何内置函数,这让我陷入困境。我最初的想法是函数内的以下循环:

 for revert in range(1, len(x) + 1):
    y.append(x[-revert])

它有效。但问题是我正在使用 len(x) ,我认为这是一个内置函数,对吗?

所以我四处搜索并制作了以下非常简单的代码:

 y = x[::-1]

这正是我想要的,但它似乎太简单/容易了,我不确定 "::" 是否算作一个函数。

所以我想知道是否有人对如何手动设计上述功能有任何提示/想法?当你不能使用任何内置函数时,这似乎真的很难,而且它让我卡住了很长一段时间。

原文由 NAstuden 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 562
2 个回答

rangelen 都是 内置函数。由于接受了 list _方法_,您可以使用 insert 来执行此操作。它确实 很慢*但它可以在不使用任何内置插件的情况下完成 列表的工作:

 def rev(l):
    r = []
    for i in l:
        r.insert(0, i)
    return r

通过在第零个位置连续插入,您最终会得到输入列表的反转版本:

 >>> print(rev([1, 2, 3, 4]))
[4, 3, 2, 1]

正在做:

 def rev(l):
    return l[::-1]

也可以算是一种解决方案。 ::-1:: 有不同的结果)不是一个函数(它是一个切片)和 [] 方法是。此外,对比 insert ,它更快,可读性更强;只要确保你能够理解和解释它。 在这个 SO answer 中可以找到关于它如何工作的一个很好的解释。

*Reeaaalllyyyy slow, see juanpa.arrivillaga’s answer for cool plot and append with pop and take a look at in-place reverse on lists as done in Yoav Glazner’s回答。

原文由 Dimitris Fasarakis Hilliard 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一种方式(只是为了完整性:))

 def another_reverse(lst):
    new_lst = lst.copy() # make a copy if you don't want to ruin lst...
    new_lst.reverse() # notice! this will reverse it in place
    return new_lst

原文由 Yoav Glazner 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题