为什么python列表会这样做?

时间:2015-03-29 20:32:39

标签: python list

我想在python中复制一个列表,同时删除一个元素:

x = [1,2,3]
a = list(x).remove(2)

虽然x仍然按预期[1,2,3],但aNone而不是我预期的[1,3]

如果我将第2行分为两行,我会得到预期的行为:

x = [1,2,3]
a = list(x)
a.remove(2)

a现在为[1,3],x未经修改。

为什么会这样?

2 个答案:

答案 0 :(得分:4)

.remove()方法修改列表本身,它不返回修改后的列表。例如:

x = [1, 2, 3]
x.remove(2)
print x

结果:

[1, 3]

通常,most list methods就地修改列表。某些方法的内置函数(例如sorted用于.sort())会返回修改后的列表,但.remove()没有。

答案 1 :(得分:0)

如果您确实需要复制列表,有几个选项,但我更喜欢:

x = [1, 2, 3]
y = x[:]
x.remove(2)
print x, y

打印:

[1, 3] [1, 2, 3]