我想在python中复制一个列表,同时删除一个元素:
x = [1,2,3]
a = list(x).remove(2)
虽然x
仍然按预期[1,2,3]
,但a
为None
而不是我预期的[1,3]
。
如果我将第2行分为两行,我会得到预期的行为:
x = [1,2,3]
a = list(x)
a.remove(2)
a
现在为[1,3]
,x未经修改。
为什么会这样?
答案 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]