我想将 append() 附加到嵌套列表中,但最终附加到我的所有列表中,为什么?

I want to append() to a nested list, but end up appending to all my lists, why?

提问人:marfin 提问时间:2/15/2023 更新时间:2/15/2023 访问量:73

问:

我有我的对象:

def NewShip(length, width, height):
    frontLeft = [] #ship[5]
    frontRight = [] #ship[6]
    midLeft = [] #ship[7]
    midRight = [] #ship[8]
    backLeft = [] #ship[9]
    backRight = [] #ship[10]
    for i in range(88):
        x = []*18
        frontLeft.append(x)
        frontRight.append(x)
        midLeft.append(x)
        midRight.append(x)
        backLeft.append(x)
        backRight.append(x)
    return [length, width, height, [], dict(), frontLeft, frontRight, midLeft, midRight, backLeft, backRight]

在每个“frontLeft”等中,我想添加一个名为“容器”的列表,如下所示:

[id, 20, 2, cargo]

在每个“backRight”等的 88 个列表中,每个列表中的每个容器中都应该只有 18 个这样的容器。

这就是我尝试过的:

def loadContainerToShip(ship,container):
    newWeight = container[4]
    lightestArea = getLightestArea(ship) #returns the index of the lightest area
    lightestStack = getLightestStack(ship[lightestArea]) #returns index of the lightest stack(list)
    loaded = False
    for i in range(len(ship[lightestArea][lightestStack])):
#here i want to insert the new container if the container "below" in the tack is heavier
        oldWeight = getTotalWeightContainer(ship[lightestArea][lightestStack][i])
        if oldWeight <= newWeight:
            #insertContainerOnShip
            ship[lightestArea][lightestStack].insert(i,container)
            ship[3].append(container)
            addContainerToDict(ship,container)
            loaded = True
            break
    if not loaded: 
        print(ship[lightestArea][lightestStack])
        ship[lightestArea][lightestStack].append(container)
        ship[3].append(container)
        addContainerToDict(ship,container)

当我这样做时,我将每个容器插入到 NewShip 减速中提到的所有 6 个列表中。 所以所有列表都是相同的,而且它不会将另一个容器添加到列表中,它会覆盖是吗?为什么以及如何修复

Python 循环 索引 追加 嵌套列表

评论

3赞 Klaus D. 2/15/2023
您将创建的列表附加到许多其他列表。如果你改变,它会在任何地方改变,因为它是同一个对象。xx
1赞 matszwecja 2/15/2023
x = []*18是对同一内部列表的 18 个引用的列表。
0赞 marfin 2/15/2023
我改变它。现在我每个 88 个列表只有一个容器,但 88 个列表中的一个有 512 个元素?我追加或插入的方式一定有问题,因为结果应该是 88 * 6 个列表,容器数量大致相同。但它是一个与许多人相距甚远的?@Kla
0赞 marfin 2/15/2023
@KlausD。你觉得怎么样?
0赞 marfin 2/15/2023
@matszwecja你怎么看?

答: 暂无答案