在python3中从列表中删除元素时获得不同的输出

在python3中从列表中删除元素时获得不同的输出,python,python-3.x,list,Python,Python 3.x,List,我想用列表中的每个数字检查每个数字,而不重复任何检查。此代码: a = [0,1,2,3,4] b = a for i in a : for j in b: print(i,j) del b[0] 它给出了输出: 0 0 0 1 0 2 0 3 0 4 2 1 2 2 2 3 2 4 4 2 4 3 4 4 我想要的输出是: 0 0 0 1 0 2 0 3 0 4 1 1 1 2 1 3 1 4 2 2 2 3 2 4 3 3 3 4 4 4 为什么我要跳

我想用列表中的每个数字检查每个数字,而不重复任何检查。此代码:

a = [0,1,2,3,4]
b = a

for i in a :
    for j in b:
        print(i,j)
    del b[0]
它给出了输出:

0 0
0 1
0 2
0 3
0 4
2 1
2 2
2 3
2 4
4 2
4 3
4 4
我想要的输出是:

0 0
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4

为什么我要跳过1和3?当我删除行“del b[0]”时,它是固定的,但据我所知,该行不应对“I”的值有任何影响
b
是参照
a
分配的,而不是列表
a
的副本,因此当您从
b
中删除项
0
时,它也会从
a
中删除。相反,您应该为
b
分配
a
的副本:

a = [0,1,2,3,4]
b = a[:]

for i in a:
    for j in b:
        print(i,j)
    del b[0]
这将产生:

0 0
0 1
0 2
0 3
0 4
1 1
1 2
1 3
1 4
2 2
2 3
2 4
3 3
3 4
4 4

您正在修改正在迭代的列表,很明显,长度会动态变化

使用计数器迭代列表,并在删除某些内容时减少计数器,以避免“跳转”元素


请注意
b
a

的参考,您正在修改正在迭代的列表:不要这样做!那么,我在这里可以做些什么来实现所需的输出?请参阅链接的DUPEAN,最重要的是,为什么跳过1和3?我觉得很奇怪,因为我没有做任何事情来列出a,但仍然在修改它,或者跳过了一些数字。从
b
中删除元素对
I
的值没有影响。但是它确实改变了
i
的含义,因为在删除之后,
b[i]
不再指向同一个元素。和
a
b
都指向同一个列表,因此从
b
中删除也会从
a
中删除。是!!这就是我要找的。我现在明白了,这是a的参考。谢谢很高兴能帮上忙。如果你认为这个答案是正确的,你能把它标记为被接受吗?我试过了,但只有在写了5分钟后它才会被接受。我会在2分钟后做