如何使用其他元素查找列表中每个元素的总和

时间:2015-10-30 03:31:04

标签: python list python-3.x

我需要编写一个函数,对于任何列表,列表中的每个元素都加在一起,看它是否等于常量。

例如:

L = [1, 2, 3, 4]

加在一起的每个元素的总和是1+2=31+3=41+4=52+3=52+4=63+4=7

然后将这些结果中的每一个测试为常数,例如,如果输出= C,其中C = 3,并将两个相加的常数相加的数字附加到要打印的新列表中。

我不允许在这里使用索引。

到目前为止,我可以在列表中成对添加数字:

def prize(L):
    possible = []
    C = 4
    prevprev = L.pop(0)
    prev = L.pop(0)
    print("initial", prevprev, prev)

    for n in L:
        i = prev + prevprev
        prevprev = prev
        prev = L.pop(0)


    if i == C:
        possible.append(i)

    return possible

print("possible ", possible)

但是由于某些原因,当迭代它时,它会错过列表中的最后2个元素。

1 个答案:

答案 0 :(得分:2)

我不能很好地遵循你的代码或解释,但我相信这会做你想要的。这是在没有itertools模块的情况下完成的。使用它会产生更紧凑的代码。这是作为itertools

的替代方法完成的
lst = [1, 2, 3, 4]

def prize(L):
    pair_list = []
    C = 4

    # Creates a list of tuples (1, 2), (1, 3), etc
    for x in L:
        for y in L:
            # if x != y | To prevent 1 + 1 and 2 + 2 (following example)
            # (y, x) not in pair_list | Prevent inverted pairs
            if x != y and x + y == C and (y, x) not in pair_list:
                pair_list.append((x, y))

    # Return list tuples that add to constant           
    return pair_list

print('Possible', prize(lst))

如果您想使用itertools,那么您将使用

from itertools import combinations

def prize(L):
    C = 4
    return [(x, y) for x, y in combinations(L, 2) if x + y == C]

lst = [1, 2, 3, 4]

print('Possible', prize(lst))