问一点集合和列表的区别问题


a=list(range(10))
for i in a:
    a.remove(i)
    print(a)

这样不会报错,但是下面会报错

a=set(range(10))
for i in a:
    a.remove(i)
    print(a)

想知道为什么列表在for循环时长度改变不会报错,但是集合会报错

首先你的第一份代码 a.remove(i) a是列表 a有remove(i)这个方法 第二份a是个集合 集合没有remove 可以用a.discard(元素)
其次第一份代码按照从左到右的顺序删除的话,应该是删除不完列表里全部元素的,因为比如[1,2,3] 当你用索引0删除第0个元素1时,下一次用索引1删除第一个元素[2,3] 此时3是索引为1的元素,2就剩下了。

for i in a.copy():
a.remove(i)
可以这样改,不过不知道为啥错。毕竟很少用遍历的方法删元素。