繁体   English   中英

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

[英]Appending consecutive equal values to a list in 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])))

你明确地打破并返回何时

j == i[len(i) - 1])

在( (3,3,3) )的第一次迭代中, j很显然是3,而i任何单元格显然都是3-这将立即为True并中断,然后返回。

如果要检查是否位于最后一个索引中 ,请遍历索引 ,而不要遍历元素:

for perm in perms:
    ...
    for j in range(len(perm)):
        ...
        if j == len(perm) - 1:
            return [True, stackArr]

无需elsebreak

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM