2011-09-19 79 views
0

我有以下代码:问题与Python范围()

def steps(low, hi, n): 
rn = range(n) 
newrn = rn 
print rn #print 1 
for x in rn[:]: 
    print x 
    newrn[x] = float(x)/n 

diff = hi - low 

print newrn 
print rn #print 2 
for y in rn[:]: 
    print y 
    rn.insert(y, (newrn[y] * diff) + low) 

return rn 

出于某种原因,我的RN返回第一打印[0,1,2],但我的第二打印返回[0,.333, 0.666。为什么会改变?我只改变了新的,但也正在改变。当它试图运行rn.insert行时,这让我得到'列表索引必须是整数不浮点'错误。

有帮助吗?

回答

5

问题出在您何时完成这项任务:newrn = rn。现在newrnrn指向相同的列表,所以当你修改一个,你修改两个。

改为使用newrn = rn[:]

3

这是变量如何在Python中工作。在那里:

newrn = rn 

你分配一个参考,而不是一个值(这是很好的,有时,你以后不要所有的值复制到一个新的列表)。如果您想要一个具有相同值的新单独列表,请执行以下操作:

newrn = list(rn)