Почему мое понимание списка не показывает тот же результат, что и для циклов 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)]

1 ответ

В вашем списке понимания, вы положили (a,b,c) вместо (array[a],array[b],array[c]), Более того, вам не нужен цикл for перед оператором print, потому что он уже включен в понимание. Таким образом, вы можете написать следующее:

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)]
Другие вопросы по тегам