所以,我正在处理一个python脚本,它将获取一个整数列表(S),并根据S中的整数输出一个列表列表,每个列表的总和必须相同值。
我在添加相同值时遇到问题。当我希望它创建另一个条目时,Python似乎将它们聚合为相同的值。
我尝试使用.extend获得相同的结果。此外,我已经阅读并看到有关通过常数乘以创建多个值的帖子。这里的问题是我不知道我将添加元素的次数。有一个简单的解决方案吗?很抱歉,如果之前已经回复过,但我找不到。
import itertools
def arrangeBoxes(stacks, arr):
perms = itertools.permutations(arr)
total = sum(arr)
stackSize = total / stacks
if (not(stackSize.is_integer())):
return [False, []]
for i in perms:
tempSum = 0
tempArr = []
stackArr = []
built = False
for j in i:
tempArr.append(j)
if (sum(tempArr) == stackSize):
stackArr.append(tempArr)
tempArr = []
if (j == i[len(i) - 1]):
built = True
break
else:
if (j == i[len(i) - 1]):
break
if (built):
return [True, stackArr]
return [False, []]
# Doesn't Work.
# Output: [True, [[3]]]
# Should be: [True, [[3], [3], [3]]
print(str(arrangeBoxes(3, [3, 3, 3])))
# Works fine.
# Output: [True, [[2, 1], [2, 1], [3]]]
print(str(arrangeBoxes(3, [2, 1, 2, 1, 3])))
答案 0 :(得分:0)
你明确地破解并在
时返回j == i[len(i) - 1])
在第一次迭代((3,3,3)
)j
中,显然为3,i
中的任何单元格显然为3 - 这将立即为True并中断,然后返回。< / p>
迭代索引,如果你想检查你是否在最后的索引,而不是在元素上:
for perm in perms:
...
for j in range(len(perm)):
...
if j == len(perm) - 1:
return [True, stackArr]
无需else
或break
。