【发布时间】:2012-11-27 23:05:25
【问题描述】:
我有一个名为hab 的列表列表,充当二维数组。在这个列表列表中,我存储了一个名为 loc 的类的元素,这就是我不使用 numpy 数组的原因(它不存储数字)。
我想通过循环遍历每个元素来用随机选择的“loc”填充每个元素。但是,似乎每当我到达一行的末尾时,程序都会获取最后一行元素并将其放入该行中的所有其他元素中。这意味着我最终得到的列表如下所示:
3 3 3 3 3
1 1 1 1 1
2 2 2 2 2
2 2 2 2 2
4 4 4 4 4
实际上我希望所有这些数字都是随机的(这是打印出每个 loc 的特定特征,这就是为什么它是数字)。
以下是相关代码:
allspec=[] # a list of species
for i in range(0,initialspec):
allspec.append(species(i)) # make a new species with new index
print 'index is',allspec[i].ind, 'pref is', allspec[i].pref
hab=[[0]*xaxis]*yaxis
respect = randint(0,len(allspec)-1)
for j in range(0,yaxis):
for k in range (0,xaxis):
respect=randint(0,len(allspec)-1)
print 'new species added at ',k,j,' is ', allspec[respect].ind
hab[k][j]=loc(k,j,random.random(),allspec[respect])
print 'to confirm, this is ', hab[k][j].spec.ind
for k in range (0,xaxis):
print hab[k][j].spec.ind
printgrid(hab,xaxis,yaxis)
print 'element at 1,1', hab[1][1].spec.ind
在循环中,我确认我创建的元素是我希望它与行 print 'to confirm, this is ', hab[k][j].spec.ind 相同的元素,此时它很好。只有当该循环退出时,它才会以某种方式用相同的东西填充行上的每个元素。我不明白!
【问题讨论】:
-
你应该在这里使用
random.choice,或者甚至可能使用random.sample。 -
你能展示你的
printgrid函数吗?很有可能您实际上创建了正确的列表,但随后打印错误。