为什么这些代码在Python for 循环列表中的工作方式不同

问题描述 投票:0回答:3

我是编码初学者,但有时需要这样做。 我想编写代码,在列表中临时挑选出元素。 例如 [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]

这些代码的工作方式与我想象的不同的原因。 我希望你能给我一个答案。 谢谢你。

list for-loop copy
3个回答
0
投票

您能提供更多信息吗?你的想法不太清楚。


0
投票

在 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]

查看更多详情这里


0
投票

这些代码工作方式不同的原因是因为

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)
© www.soinside.com 2019 - 2024. All rights reserved.