注册
登录
查看:723 | 回复:12
等天黑
我想用remove和for除去所有元素,但遇到了点问题,大佬帮忙看看
发表于 2022/11/16 12:32:58
楼主

例如【1,2,3,4】我想用remove和for除去所有元素,如果用一层for循环会因为remove导致i指标变化导致无法除去所有元素 ,下面的代码可以解决,但是我看不懂i的变化有没有大神能教一下

list = [1,2,3,4]
for i in list[:]:
for i in list[:]:
print(i,list)
list.remove(i)
 
print(list)


等天黑
发表于 2022/11/16 12:37:57
沙发

说错了一点 是导致i指标变化超出循环元素数而无法除去所有元素

发表于 2022/11/16 12:41:46
板凳

是不是多打了一行

for i in list[:]:

等天黑
发表于 2022/11/16 12:46:08
4楼

没有

发表于 2022/11/16 12:48:39
5楼

list[:]
这个应该是类似于list.copy()吧,不是原列表了

等天黑
发表于 2022/11/16 12:49:17
6楼

就是两层for 都是i


发表于 2022/11/16 12:52:33
7楼

那我就看不懂了

等天黑
发表于 2022/11/16 12:57:01
8楼

如果 两层不一样的i的话会这样list = [1,2,3,4]

for i in list:
for a in list:
print(i,a,list)
list.remove(i)
print(list)
 1, 1, [1, 2, 3, 4])
[2, 3, 4]
(1, 3, [2, 3, 4])
ValueError: list.remove(x): x not in list


只有上面那个能解决 我想不明白i的指标变化

发表于 2022/11/16 13:01:06
9楼

%A4VMG2XZJQUNB_X(TXAYDC.png


我把第一行循环删了结果还是一样

第一行的循环是多余的,因为第二行循环超过下标后,第一行也自然超过了

发表于 2022/11/16 13:03:18
10楼

好像也不是超标的原因,应该是第一层for在第二次循环的时候list已经空了,第二层循环已经没意义了

等天黑
发表于 2022/11/16 13:06:35
11楼

我感觉是因为list[:]是副本 for循环除去的是副本的值,所以原来的list可以正常除去每个I的值,如果不用副本就会因为【1,2,3】i指标为0除去1,变为【2,3】.i指标为1,除去3剩下【2】,i指标为2找不到元素而跳出循环

所以我说i指标超出元素数

立即注册站大爷用户,免费试用全部产品
立即注册站大爷用户,免费试用全部产品