首页 > 解决方案 > 结果仅作为最后一个结果附加到列表

问题描述

我正在尝试编写一个简短的程序来确定四个骰子的每个组合,这些骰子相乘以产生 72 的乘积,如果我打印出在 for 循环中产生 72 的组合,但如果我尝试将它附加到结果列表它只返回 [6,6,6,6] (最后可能的组合)。

# code to determine every combination of 4 dice that multiplys to 72
# nxt function creates next possible combination eg [0, 1, 4, 6] becomes [0, 1, 5, 0]
def nxt(number):

    carry = 0
    for i in range(len(number) - 1, -1, -1):
        if i == len(number) - 1:
            number[i] += 1
            if number[i] > 6:
                carry = 1
                number[i] = 0
        else:
            number[i] += carry
            if number[i] > 6:
                carry = 1
                number[i] = 0
            else:
                carry = 0
    return number


dice = [0, 0, 0, 0]
result = []

#2400 is number of combinations possible (7^4)
for i in range(0, 2400):
    if dice[0] * dice[1] * dice[2] * dice[3] == 72:
        result.append(dice)
    dice = nxt(dice)

print(result)

返回相等数量的 [6,6,6,6] 列表​​,因为有 72 个组合,其中好像一次打印一个结果而不是附加

dice = [0, 0, 0, 0]
result = []

for i in range(0, 2400):
    if dice[0] * dice[1] * dice[2] * dice[3] == 72:
        print dice
    dice = nxt(dice)

它打印出来就好了

标签: python

解决方案


问题出在 for 循环中。确切地说,在附录中。它应该是:

result.append(dice[:])

您所做的只是多次复制参考。这意味着大列表中的所有列表都采用相同的值,因为它们本质上是相同的列表。我所做的是将实际值复制到列表中,而不是参考。


推荐阅读