我编写了此程序,该程序输出总和为一定数量的毕达哥拉斯三联体(这将是参数)。该程序可以完美运行,但是同一个三元组会出现多次,我希望一个三元组只能出现一次。我想知道是否有人可以帮助我。谢谢!

def pythagoreanCheck(tripletList):
    '''
        Checks whether the three numbers are pythagorean triplet
        returns True or False
    '''

    trip_list = [0,1,2]

    if tripletList[0]**2 + tripletList[1]**2 == tripletList[2]**2:
        return True
    else:
        return False

def givMeSum(target):
    '''
        returns 3 numbers such that their sum is equal to target
    '''

    listOfa = xrange(1,target)
    listOfb = xrange(1,target)
    listOfc = xrange(1,target)

    for i in listOfa:
        for j in listOfb:
            for k in listOfc:
                add = i + j + k

                if add == target:
                    add_list = [i,j,k]
                    add_list.sort()

                    value = pythagoreanCheck(add_list)

                    if value:
                        print add_list


def main():
    givMeSum(12)

main()

最佳答案

这是因为您要在嵌套列表中进行计算,然后创建包含相同数字的3个不同排列的排序列表。

由于i,j和k将输入相同的三个数字的不同组合3次,因此add每次都等于目标,这意味着add_list被创建和排序3次。这意味着它将创建3次相同的列表。

我认为你应该把它拿出来

add_list.sort()


Siddharth是对的,您的算法确实效率很低。您正在将其转换为O(n ^ 3)算法,如果目标数量较大,可能会花费很长时间。

关于python - 输出重复,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13190257/

10-14 19:03
查看更多