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