我一直在为udacity工作的代码如下所示。我试图弄清楚为什么当通过调用list(p)创建'g'时,列表'g'和'p'充当了同样的列表。当在移动功能中调用print语句(print [i] [j])时,它显示'g'改变时'p'被覆盖。我刚开始用python编程,我会很感激任何帮助。提前致谢。两个单独的Python列表作为一个
colors = [['red', 'green', 'green', 'red' , 'red'],
['red', 'red', 'green', 'red', 'red'],
['red', 'red', 'green', 'green', 'red'],
['red', 'red', 'red', 'red', 'red']]
measurements = ['green', 'green', 'green' ,'green', 'green']
motions = [[0,0],[0,1],[1,0],[1,0],[0,1]]
sensor_right = 0.7
p_move = 0.8
def show(p):
for i in range(len(p)):
print p[i]
total = len(colors[0])*len(colors)
for i in range(len(colors)):
p.append([])
for j in range(len(colors[i])):
p[i].append(1./total)
print p
def move(g,c,r):
t = list(g)
for i in range(len(g)):
for j in range(len(g[i])):
print p[i][j]
t[i][j] = t[(i-c)%len(g)][(j-r)%len(g[i])] * p_move
print p[i][j]
s = sum_table(t)
for i in range(len(g)):
for j in range(len(list(g[i]))):
t[i][j] /= s
return t
def sum_table(g):
sum = 0
for i in range(len(g)):
for j in range(len(g[i])):
sum += g[i][j]
print sum
return sum
move(list(p),0,1)
print p
为什么你认为你需要做所有这些复制?编写良好的Python代码通常会避免故意复制。不要复制,然后改变它,编写直接创建更改版本的代码。 – 2012-04-02 01:22:13
P.S.通过'p_move'乘以所有东西的效果被标准化步骤取消,如果您刚开始使用标准化数据,则这是不必要的。另外,由于'p'在每个地方都以相同的“1./total”值开始,所以在“旋转”数组后不会看到差异。 – 2012-04-02 01:33:28
我的代码无法按预期工作,这更令人感到沮丧。我意识到我不需要像我这样做复制,但我到了哪里我无法弄清楚问题,我想知道为什么它是错的。至于p_move,这是描述移动错误所必需的。标准化步骤将在我通过绿色或红色传感器读数循环时改变阵列。该代码尚未完成,并没有旋转阵列的一点,但随着“运动”和“读数”的发生,分布将发生变化。我正在尝试实现线性化。 – Jimmy 2012-04-02 03:51:38