【问题标题】:How to store class objects properly in 2D array如何在二维数组中正确存储类对象
【发布时间】:2019-12-16 23:20:41
【问题描述】:

我尝试模拟细胞分裂,我想将属于细胞谱系的细胞存储在二维数组中。 因此,二维数组的行元素是属于具有“事件”类中描述的属性的谱系的一部分的单元格。

一切正常,但在我的代码末尾,我无法正确存储类元素。

请帮忙,我怎样才能有效地将这些值存储在 Python3 中。

这是课程:


class Events:

    # Initializer / Instance Attributes
    def __init__(self, level, cellNum, Type, time, timeStep, ID, gen, mutNum, childID):
        self.level = level
        self.cellNum = cellNum
        self.Type = Type
        self.time = time
        self.timeStep = timeStep
        self.ID = ID
        self.gen = gen
        self.mutNum = mutNum
        self.childID = childID

这里我存储二叉树的叶子(细胞分裂树):


Counter = 0
for i in range(N):
    for k in range(Counter,len(Data)):

        if int(Data[k][0]) == n:
            LeafArray.append(Events(Data[k][0],Data[k][1],Data[k][2],Data[k][3],Data[k][4],Data[k][5],k,0,0))   
            Counter = k+1
            break   

在这里我定义了我想要存储血统数据的 LinArray,并且 我对沿袭进行排序,因为单元格的 childID 与其从叶节点开始的子 ID 相同:


LinArray = []

for i in range(len(LeafArray)):
    lincounter = 0
    LinArrayin = []
    LinArrayin.append(LeafArray[i])

    for j in reversed(range(len(EventVertices))):
        if EventVertices[j].childID==LinArrayin[lincounter].gen:
            lincounter+=1
            LinArrayin.append(EventVertices[j])

        if LinArrayin[lincounter].gen == 0:
            #print(lincounter)
            LinArray.append(LinArrayin)
            print (LinArray[0][1].gen) #error is here
            LinArrayin.clear()
            break

最奇怪的是当我在上面突出显示的行收到错误时, 这是一个索引错误:

Traceback(最近一次调用最后一次): 文件“HOT_LinTrace.py”,第 131 行,在 打印(LinArray[0][4].gen) IndexError: 列表索引超出范围

它还返回该索引的正确值。

另外奇怪的是,当我想在代码末尾打印出 LinArray 的存储元素时,它只返回索引错误消息。

请帮忙:)

【问题讨论】:

    标签: python arrays list class indexing


    【解决方案1】:

    我终于明白了!

    Python 只复制了引用,当我创建 LinArrayin = [] 时,LinArray 也被删除了。

    所以如果我换行: LinArray.append(LinArrayin)

    到: LinArray.append(LinArrayin.copy())

    有效:)

    希望它也能帮助其他人......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 2015-03-31
      • 1970-01-01
      • 2011-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多