为了账号安全,请及时绑定邮箱和手机立即绑定

python程序问题 运行报错,cannot determine type?

python程序问题 运行报错,cannot determine type?

慕仙1683277 2017-02-09 14:07:02
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

//img1.sycdn.imooc.com//589d629f0001ead610280564.jpg

查看完整回答
1 反对 回复 2017-02-10
?
多收能量多种树

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]是没有的。。。

查看完整回答
1 反对 回复 2017-02-09
  • 2 回答
  • 0 关注
  • 2350 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信