【发布时间】:2020-02-03 21:02:45
【问题描述】:
我有一个列表 a = [1,2,3,4,5]
我不明白为什么下面的代码不产生 [2,3,4,5,1]
a[1:].append(a[0])
我尝试阅读 append() 方法以及 Python 中的列表切片,但没有找到令人满意的响应。
【问题讨论】:
我有一个列表 a = [1,2,3,4,5]
我不明白为什么下面的代码不产生 [2,3,4,5,1]
a[1:].append(a[0])
我尝试阅读 append() 方法以及 Python 中的列表切片,但没有找到令人满意的响应。
【问题讨论】:
a[1:] 为您提供了一个全新的list,但您没有将它分配给任何变量,所以它只是在该行之后被丢弃。您应该将它分配给某个东西(例如,b),然后附加到它(否则append 会更改列表但不返回任何内容):
a = [1,2,3,4,5]
b = a[1:]
b.append(a[0])
现在b 是您想要的输出[2,3,4,5,1]
【讨论】:
a = a[1:] + a[:1] 可能会更简洁
append 的工作原理
我认为您在这里只是不太了解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函数。
您可能已经注意到,仅修改列表的插入、删除或排序等方法没有打印返回值——
they return the default None。 1 这是 Python 中所有可变数据结构的设计原则。
【讨论】:
首先,将第一个元素 a[0] 追加到列表中
a.append(a[0])
然后排除第一个元素
a[1:]
【讨论】: