python range()的问题

时间:2011-09-19 17:50:01

标签: python list range

我有以下代码:

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

由于某种原因,我的第一次打印返回[0,1,2],但我的第二次打印返回[0,.333,.666]。为什么变化?我只改变了newrn,但是也变了。这使得我在尝试运行rn.insert行时得到'list indices must be integer not float'错误。

任何帮助?

2 个答案:

答案 0 :(得分:5)

问题在于您完成此任务:newrn = rn。现在,newrnrn都指向同一个列表,因此当您修改一个列表时,您同时修改它们。

改为使用newrn = rn[:]

答案 1 :(得分:3)

这是变量在python中的工作方式。在那里:

newrn = rn

您正在分配引用,而不是值(有时候这是好的,因为您没有将所有值复制到新列表中)。如果您想要一个具有相同值的新的单独列表,请执行以下操作:

newrn = list(rn)