为什么列表中的对象中的值不会发生变化?

时间:2016-02-08 07:11:33

标签: python python-3.x scipy

在我试图实现一个约束的代码中,总和等于需求,使用总和,然后分别对其进行分割,如

中的代码所示。
self.MaX[o].x=self.MaX[o].x*DEMAND/ToT

这是我实施约束的地方。

然而,当以前我只使用直接变量而不使用任何列表时,代码工作正常,但在我介绍了List之后我已经开始遇到这个问题,其中值没有像我预期的那样改变,或者他们的方式它应该在逻辑上改变。

你可以看到代码实现后的ToT值应该等于DEMAND,但是没有发生。

class chromosome:
    def __init__(self,identifier):
        self.x=D.PDF[identifier].rvs()
        self.identifier=identifier

class individual:
    def __init__(self):
        self.MaX=[]
        for o in range(3):
            self.MaX.append(chromosome(o))

        ToT=sum(chromosome.x for chromosome in self.MaX)
        print("before changing total is {}".format(ToT))

        for i in range(D.COEF.shape[1]):
            print("Individual values before {}".format(self.MaX[o].x))
            self.MaX[o].x=self.MaX[o].x*DEMAND/ToT
            print("Individual values after {}".format(self.MaX[o].x))


        ToT=sum(chromosome.x for chromosome in self.MaX)
        print("after changing total is {}".format(ToT))

此处D.PDF是以下列方式创建的自定义概率分布列表。

from scipy import stats
import scipy.ndimage
for j in range(3):
        D.space[j]=np.ones(DEMAND, dtype=np.float32)
        D.space[j]=scipy.ndimage.filters.gaussian_filter1d(D.space[j],10)
        D.space[j]=D.space[j]/D.space[j].sum()
        D.PDF[j] = stats.rv_discrete(name='pdfX'.format(j), values=(np.arange(DEMAND), D.space[j]))

请帮助解决出错的问题。我没有看到任何逻辑错误,使用列表进行此类工作是否有任何问题请告诉我。

1 个答案:

答案 0 :(得分:2)

在第二个for循环中,您的变量为i,但您引用了o(来自之前的for循环),因此您只需覆盖最后一个项目self.MaX几次。{/ p>