python - 结果仅作为最后一个结果附加到列表
问题描述
我正在尝试编写一个简短的程序来确定四个骰子的每个组合,这些骰子相乘以产生 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)
它打印出来就好了
解决方案
问题出在 for 循环中。确切地说,在附录中。它应该是:
result.append(dice[:])
您所做的只是多次复制参考。这意味着大列表中的所有列表都采用相同的值,因为它们本质上是相同的列表。我所做的是将实际值复制到列表中,而不是参考。
推荐阅读
- excel - EXCEL COUNTIFS 未正确计算比较 - 返回 0
- c++ - 10.8 == 10.8 评估为假?
- c# - 如何在asp.net web api中对请求进行排队并在服务器端执行?
- reactjs - 为 React 自定义 AWS Amplify 身份验证 UI
- android - 条件计算
- javascript - django中服务器发送验证失败时如何防止表单提交?
- python - 如何正确比较两个日期时间变量?
- c - 合并第三个数组大小相同的两个数组元素而不消除重复元素
- json - for循环中的异步,Nodejs
- php - 在 CakePHP 3 中在哪里使用 Auth->allow 和 Auth->deny