将连续相等的值附加到python中的列表

时间:2018-01-31 19:06:03

标签: python

所以,我正在处理一个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])))

1 个答案:

答案 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]

无需elsebreak