我有一个列表 a = [1,2,3,4,5]
我不明白为什么以下代码没有生成 [2,3,4,5,1]
a[1:].append(a[0])
我尝试过阅读关于Python中append()方法和列表切片的相关资料,但并没有找到满意的答案。
a[1:]
会给你一个全新的list
,但如果你没有将其赋值给任何变量,那么这个列表就会在该行代码执行后被丢弃。你应该将其赋值给某个变量(比如b
),然后再向其中添加元素(否则append
只是改变了列表但没有返回任何结果):
a = [1,2,3,4,5]
b = a[1:]
b.append(a[0])
现在b
是您想要的输出结果[2,3,4,5,1]
我认为你可能并没有真正理解append
函数。就像我在将变量从一个文件传递到另一个文件作为类变量进行内联修改中的回答一样,append
是一个就地操作,它只更新原始列表并返回None。
你的链式调用a[1:].append(a[0])
将返回链中最后一个调用的返回值,因此返回append
函数的值,即None。
就像@flakes在另一个答案中的评论一样,a[1:] + a[:1]
将返回你的目标值。你也可以尝试a[1:][1:][1:]
,它将返回一些结果。因此,关键点是append
函数是一个就地函数。
请参见Python列表更多信息
你可能已经注意到,像 insert、remove 或 sort 这样的仅修改列表的方法没有返回值被打印出来,它们返回默认的 None。这是 Python 中所有可变数据结构的设计原则。首先,将第一个元素a[0]添加到列表中
a.append(a[0])
然后排除第一个元素
a[1:]
a = a[1:] + a[:1]
。 - flakesappend
如何工作的解释。 - Ofer Sadan