问题与Python范围()
问题描述:
我有以下代码:问题与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行时,这让我得到'列表索引必须是整数不浮点'错误。
有帮助吗?
答
问题出在您何时完成这项任务:newrn = rn
。现在newrn
和rn
指向相同的列表,所以当你修改一个,你修改两个。
改为使用newrn = rn[:]
。
答
这是变量如何在Python中工作。在那里:
newrn = rn
你分配一个参考,而不是一个值(这是很好的,有时,你以后不要所有的值复制到一个新的列表)。如果您想要一个具有相同值的新单独列表,请执行以下操作:
newrn = list(rn)