创建一个成对的python列表

时间:2018-11-03 11:47:05

标签: python list for-loop

我已经构建了以下代码:

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 :(得分:1)

这里是一种仅计算右上三角形中的单元格的方法:

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可使函数“多次返回”(多次挥手),这不是必需的。