0

下面是我的三元组代码,总和为给定值(使用 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)]
4

1 回答 1

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)]
于 2018-08-23T20:41:38.083 回答