我需要编写一个函数,对于任何列表,列表中的每个元素都加在一起,看它是否等于常量。
例如:
L = [1, 2, 3, 4]
加在一起的每个元素的总和是1+2=3
,1+3=4
,1+4=5
,2+3=5
,2+4=6
,3+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个元素。
答案 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))