Создание списка пар python - PullRequest
0 голосов
/ 03 ноября 2018

Я построил следующий код:

def pairs(num_list, n):
    list1 = []
    for num1 in num_list:
        for num2 in num_list:
            if num1 + num2 == n:
                list1.append([num1, num2])
    return(list1)

print(pairs([2,3,4,5],7))

Вывод:

[[2, 5], [3, 4], [4, 3], [5, 2]]

НО мне нужны только неповторяющиеся пары, чтобы показать например [[2, 5], [3, 4]] (неважно, какая пара)

Я подумал, что мне нужно более эффективно просматривать числа, например: первый цикл проходит через 2. второй цикл сравнивает его с 3,4,5 (без 2) затем первый цикл проходит через 3. второй цикл проходит через 4,5 (без 2 или 3) и так далее. Как я могу сделать это с помощью кода?

1 Ответ

0 голосов
/ 03 ноября 2018

Вот способ рассчитать только ячейки в верхнем правом треугольнике:

def pairs(num_list, n):
    for i in range(len(num_list)):
        for j in range(i, len(num_list)):
            if num_list[i] + num_list[j] == n:
                yield [num_list[i], num_list[j]]


lst = [2,3,4,5]
print(list(pairs(lst, 7)))

выход

[[2, 5], [3, 4]]

без доходности

def pairs(num_list, n):
    res = []
    for i in range(len(num_list)):
        for j in range(i, len(num_list)):
            if num_list[i] + num_list[j] == n:
                res.append([num_list[i], num_list[j]])
    return res

print(pairs(lst, 7))

yield позволяет функции "возвращать несколько раз" (много раздач), в этом нет необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...