我是编码初学者,但有时需要这样做。 我想编写代码,在列表中临时挑选出元素。 例如 [1,2,3,4] >> [2,3,4] [1,3,4] [1,2,4] [1,2,3] 如上所述 所以我做了一些代码。但结果与我的预期不同。 例如下面的代码, 只有No3和我的预期一样。
1)
a = [1,2,3,4]
c = [1,2,3,4]
for i in a:
b = c
b.remove(i)
print(b)
[2,3,4][3,4][4][]
2)
a = [1,2,3,4]
for i in a:
b = a
b.remove(i)
print(b)
[2, 3, 4] [2, 4]
3)
a = [1,2,3,4]
for i in a:
b = [1,2,3,4]
b.remove(i)
print(b)
[2,3,4][1,3,4][1,2,4][1,2,3]
这些代码的工作方式与我想象的不同的原因。 我希望你能给我一个答案。 谢谢你。
您能提供更多信息吗?你的想法不太清楚。
在 for 循环中的每次迭代中,您实际上是在修改 c (b=c)。 “b”不是新的内存位置,它只是指向旧列表“c”:
>>> a = [1,2,3,4]
>>> c = [1,2,3,4]
>>> for i in a:
... print (f'c: {c}')
... b = c
... b.remove(i)
... print(f'b: {b}')
...
c: [1, 2, 3, 4]
b: [2, 3, 4]
c: [2, 3, 4]
b: [3, 4]
c: [3, 4]
b: [4]
c: [4]
b: []
要解决此问题,您必须创建原始列表“c”的副本:
>>> import copy
>>>
>>> a = [1,2,3,4]
>>> c = [1,2,3,4]
>>> for i in a:
... b = copy.deepcopy(c)
... b.remove(i)
... print(b)
...
[2, 3, 4]
[1, 3, 4]
[1, 2, 4]
[1, 2, 3]
查看更多详情这里。
这些代码工作方式不同的原因是因为
1)
a = [1,2,3,4]
c = [1,2,3,4]
for i in a:
b = c
b.remove(i)
print(b)
[2,3,4][3,4][4][]
对于此代码
变量“b”和“c”是链接的(它们指向相同的内存空间),因此从列表“b”中删除的任何内容也会从列表“c”中删除
2)
a = [1,2,3,4]
for i in a:
b = a
b.remove(i)
print(b)
[2, 3, 4] [2, 4]
对于此代码
变量“a”和“b”也是链接的,因此从列表“b”中删除的任何内容也会从列表“a”中删除。但是当您从列表“b”(链接到列表“a”)中删除时,“for 循环”的项目也会受到影响。
3)
a = [1,2,3,4]
for i in a:
b = [1,2,3,4]
b.remove(i)
print(b)
[2,3,4][1,3,4][1,2,4][1,2,3]
对于此代码
列表 [1,2,3,4] 在循环的每次迭代中分配给“b”的内容是它起作用的原因
将一个列表分配给另一个列表而不链接它使用
copy.deepcopy(a)