下面是我的三胞胎代码,它们的总和为给定值(使用for循环)
def triplet(array,num):
for a in range(len(array)):
for b in range(a):
for c in range(b):
if array[a]+array[b]+array[c]==num:
print(array[a],array[b],array[c])
triplet([6,5,4,7,3,12],15)
结果低于预期(预期)
(4, 5, 6)
(3, 7, 5)
但是,如果我更改代码以使用列表推导(如下所示),则结果不正确。为什么?
def triplet(array,num):
for a in range(len(array)):
print [(a,b,c) for a in range(len(array)) for b in range(a) for c in range(b) if array[a]+array[b]+array[c]==num]
triplet([6,5,4,7,3,12],15)
以上代码的结果如下
[(2, 1, 0), (4, 3, 1)]
答案 0 :(得分:0)
在列表理解中,您放置了(a,b,c)
而不是(array[a],array[b],array[c])
。此外,您不需要在print语句之前使用for循环,因为它已经包含在理解中。因此,您可以编写如下:
def triplet(array,num):
print([(array[a],array[b],array[c]) for a in range(len(array)) for b in range(a) for c in range(b) if array[a]+array[b]+array[c]==num])
triplet([6,5,4,7,3,12],15) # [(4, 5, 6), (3, 7, 5)]