【问题标题】:Python List Append not working on sliced listsPython List Append 不适用于切片列表
【发布时间】:2020-02-03 21:02:45
【问题描述】:

我有一个列表 a = [1,2,3,4,5]

我不明白为什么下面的代码不产生 [2,3,4,5,1]

a[1:].append(a[0])

我尝试阅读 append() 方法以及 Python 中的列表切片,但没有找到令人满意的响应。

【问题讨论】:

    标签: python list append slice


    【解决方案1】:

    a[1:] 为您提供了一个全新的list,但您没有将它分配给任何变量,所以它只是在该行之后被丢弃。您应该将它分配给某个东西(例如,b),然后附加到它(否则append 会更改列表但不返回任何内容):

    a = [1,2,3,4,5]
    b = a[1:]
    b.append(a[0])
    

    现在b 是您想要的输出[2,3,4,5,1]

    【讨论】:

    • 在 op 的情况下,写 a = a[1:] + a[:1] 可能会更简洁
    • @flakes 我同意,但他想解释一下切片以及append 的工作原理
    • 我同意。 Cleaner 对我来说不是正确的选择。不要试图从您的回复中删除任何内容!
    • @flakes 没关系,你指出这一点是对的,教 OP 以另一种方式看待它也很好
    • @flakes 您的一段代码有效(这正是我所采用的),但我想知道为什么附加不能像我使用的那样工作。 Ofer 清除它:)
    【解决方案2】:

    我认为您在这里只是不太了解append 功能。就像我在Passing a variable from one file into another as a class variable after inline modification 中的回答一样,append 是一个就地操作,它只是更新原始列表并返回 None。

    你的链调用a[1:].append(a[0])会返回链中最后一个调用返回值,所以返回append函数值,即None。

    就像@flakes 在另一个答案中的评论一样,a[1:] + a[:1] 将返回您的目标值。你也可以试试a[1:][1:][1:],它会返回一些 结果。所以关键是append函数是in-place函数。

    python more on list

    您可能已经注意到,仅修改列表的插入、删除或排序等方法没有打印返回值——they return the default None。 1 这是 Python 中所有可变数据结构的设计原则。

    【讨论】:

      【解决方案3】:

      首先,将第一个元素 a[0] 追加到列表中

      a.append(a[0])
      

      然后排除第一个元素

      a[1:]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-03
        • 2020-06-30
        • 2018-12-24
        • 2021-07-01
        • 1970-01-01
        • 2017-06-24
        • 2015-02-19
        • 2014-05-13
        相关资源
        最近更新 更多