проблемы с диапазоном Python () - PullRequest
       8

проблемы с диапазоном Python ()

0 голосов
/ 19 сентября 2011

У меня есть следующий код:

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, .666].Почему рН меняется?Я только меняю newrn, но rn тоже меняется.Это заставляет меня получить сообщение об ошибке «индексы списка должны быть целыми числами, а не числами с плавающей запятой» при попытке запустить строку rn.insert.

любая помощь?

Ответы [ 2 ]

5 голосов
/ 19 сентября 2011

Проблема в том, что вы сделали это назначение: newrn = rn.Теперь и newrn, и rn указывают на один и тот же список, поэтому, когда вы изменяете один, вы изменяете оба.

Используйте взамен newrn = rn[:].

3 голосов
/ 19 сентября 2011

Так работают переменные в python. Там:

newrn = rn

Вы присваиваете ссылку, а не значение (что иногда хорошо, поскольку вы не копируете все значения в новый список). Если вы хотите новый, отдельный список с теми же значениями, сделайте это:

newrn = list(rn)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...