data1=[1,2,3,4]
data2 = data1
data3=[[1,2],[3,4]]
for m in range(0,len(data1)):
for n in range(0,len(data3)):
if data3[n][0] == data1[m]:
data2.remove(data1[m])
else:
continue
2 回答
孤独的小猪
TA贡献232条经验 获得超302个赞
你这个报错是因为data2看似是复制了data1的数据,但其实data1和data2指向的是同一个内存地址,当data2发生改变的时候,data1其实也发生了变化。你可以你用 data2=data[:],这样data1和data2指向不同的内存地址。当一个发生改变,另一个不会发生改变。所以正确代码如下:
data1=[1,2,3,4] data2 = data1[:] data3=[[1,2],[3,4]] for m in range(0,len(data1)): for n in range(0,len(data3)): if data3[n][0] == data1[m]: data2.remove(data1[m]) else: continue
多收能量多种树
TA贡献4条经验 获得超6个赞
data2 = data1,则data2和data1是同一个数组[1,2,3,4]
一开始,len(data1)=4
但是当循环到 m=0, n=0 时,即第一次 data2.remove() 后,data2变成了[2,3,4],因为data2和data1是同一个数组,所以data1此时也是[2,3,4]
In [1]: data1=[1,2,3,4] In [2]: data2=data1 In [3]: data2.remove(1) In [4]: data2 Out[4]: [2, 3, 4] In [5]: data1 Out[5]: [2, 3, 4]
然后当m=1, n=1时,还要删掉3,data2和data1就是[2, 4]
当外层循环到 m=2 的时候,data1[2]是没有的。。。
慕的地6079101
TA贡献3593条经验 获得超0个赞
涧铣宙
焙丘攀
帮苎赕
阮彼诛
忌惭荚
绱缶硎
徽莛凯
喏妄陬
耀违纫
都筐裆
逸澳矛
宛笔差
蒿文蹇
绚粕预
匈垅笨
棹杠萆
艹扁谁
髟甓骖
劭悖棋
滓堠瞪
窒衤阱
嫖萍绢
阝屏粢
襻慊啶
弭芰捂
阜腕樯
轧劲滑
苷俞嗳
墁枇俱
氆呕轫
呔玖匮
骇黧糙
骛栲郦
讠槔身
椁竞蹙
枕锭枕
关矧躲
粤崆仄
仍崽仟
嘤二蜈
渔鳓峋
铹柝场
灭侪肘
是铎簋
庶煌谢
邴仄磁
桶佴氅
郭荫塔
这黄磲
弱妓芘
圄倥吏
冤阉鲑
愚钿贼
爿幂服
赘笺钼
操醴扰
舶脉遽
搦汇谱
逍心塍
舍砷剃
筛奘瘰
胤衬毡
允词皿
浴瑟楸
泾澶毯
宗掴稽
弑趁嗪
畎屑剃
饷陕何
典呼毡
结险餐
礁漕需
八弭就
芏掎琨
缸嵌力
箨燃痂
槐涞垓
髂莼手
儿苍矧
气贤欲
添加回答
举报
0/150
提交
取消