Python 列表切片后无法添加元素

4

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

我不明白为什么以下代码没有生成 [2,3,4,5,1]

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

我尝试过阅读关于Python中append()方法和列表切片的相关资料,但并没有找到满意的答案。

3个回答

4

a[1:]会给你一个全新的list,但如果你没有将其赋值给任何变量,那么这个列表就会在该行代码执行后被丢弃。你应该将其赋值给某个变量(比如b),然后再向其中添加元素(否则append只是改变了列表但没有返回任何结果):

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

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


3
在op的情况下,更好的写法可能是a = a[1:] + a[:1] - flakes
2
@flakes 我同意,但他想要有关切片和append如何工作的解释。 - Ofer Sadan
我同意。在我的选择中,“清洁工”不是正确的词汇。并不是想贬低你的回答! - flakes
@flakes 没问题,你指出这一点是正确的,教会 OP 另一种看待问题的方式也是好的。 - Ofer Sadan
1
@flakes,你的代码片段可行(正是我所采用的),但我想知道为什么追加操作没有像我使用的那样起作用。Ofer 给出了解释 :) - shubhamgoel27

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 中所有可变数据结构的设计原则。

0

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

a.append(a[0])

然后排除第一个元素

a[1:]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接