быстрый способ сделать def pair_sum () - PullRequest
0 голосов
/ 18 октября 2019

Кто-нибудь знает, как это сделать простым и эффективным способом? Спасибо

Определите функцию с именем pair_sum (), которая принимает два входа: список целых чисел и сумму.

Функция должна возвращать список кортежей, где каждое значение в кортеже являетсяуникальное значение из входного списка, и где сумма элементов кортежа равна сумме. Каждая пара значений в списке ввода, которая суммируется с итогом, должна появляться в списке вывода только один раз. Например, если входной список равен [3, 2, 1], а общее количество равно 4, то выходной список будет содержать только кортеж (3, 1), а не кортеж (1, 3). Другими словами, если (i, j) является кортежем в списке вывода, тогда я должен появиться слева от j в списке ввода.

Например:

Результат теста

print(pair_sum([4, 6, 2, 7, 3], 10))
[(4, 6), (7, 3)]
print(pair_sum([4, 7, 8, 9, 3, 2, 6, 11, 1, 5, 10], 14))
[(4, 10), (8, 6), (9, 5), (3, 11)]

Ответы [ 2 ]

1 голос
/ 18 октября 2019

@ xaovnumwsercz, я предложил эту версию.

def pair_sum(numbers, target):
    answer = []
    for i, num in enumerate(numbers):
        if target-num in numbers[i+1:]:
            answer.append((num,target-num))
    return answer
0 голосов
/ 18 октября 2019
def pair_sum (numbers, pairSum):

    resultSet=[];
    newNumbers = sorted(numbers);

    i = 0;
    j = len(newNumbers)-1;

    while i < len(newNumbers) and j >= 0:

        if newNumbers[i] + newNumbers[j] == pairSum and i != j:   
            if (newNumbers[j], newNumbers[i]) not in resultSet and numbers.index(newNumbers[i]) < numbers.index(newNumbers[j]):    
                resultSet.append((newNumbers[i], newNumbers[j]))
                numbers.remove(newNumbers[i]);
                numbers.remove(newNumbers[j])

            i = i + 1;
            j = j - 1;
        elif newNumbers[i] + newNumbers[j] < pairSum:
            i = i + 1;
        else: 
            j = j - 1;

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