사용이 :
concat = lambda i,j: list(i if type(i) is list else [i])+list(j if type(j) is list else [j])
reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x]) for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), [[[],filter(lambda x:sum(x)==target,list(itertools.combinations(a,u)))] for u in range(2,len(a)+1)]))
출력 :
>>> concat = lambda i,j: list(i if type(i) is list else [i])+list(j if type(j) i
s list else [j])
>>> a=[1,1,2,-2,-4]
>>> target=0
>>> reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x])
for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), [filter(lambda
x:sum(x)==target,list(itertools.combinations(a,u))) for u in range(2,len(a))]))
(2, -2)
>>> a=[5,1,3,-4,-5]
>>> reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x])
for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), [filter(lambda
x:sum(x)==target,list(itertools.combinations(a,u))) for u in range(2,len(a))]))
[(5, -5), (1, 3, -4)]
>>> a=[1,-1,2,-2,-4]
>>> reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x])
for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), [filter(lambda
x:sum(x)==target,list(itertools.combinations(a,u))) for u in range(2,len(a))]))
[(1, -1), (2, -2)]
>>>
을 편집 : 이것은 나중에 그의 0123의 미덕으로 자신의 의도를 변경 op 때문입니다 92,348,999,
f=lambda x:tuple(map(lambda x:a[x],x)) if type(x)==tuple else map(lambda x:f(x),x)
f(reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x]) for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), [filter(lambda x:sum(f(x))==target,list(itertools.combinations(range(0,len(a)),u))) for u in range(0,len(a)+1)])))
이 이미 사용하는 다른 인덱스의 값을 배제하지 않는다 : 현재 번호가 temp_var` '이고 그 다음 건너 뛸 경우 경우
>>> a=[21197595.75,11885337.56,-11885337.56,-11885337.56,-9312258.19]
>>> f(reduce(lambda x,y: x if any([u in j for j in (x if type(x) is list else [x
]) for u in y]) else concat(x,y), reduce(lambda x,y: concat(x,y), concat([filter
(lambda x:sum(f(x))==target,list(itertools.combinations(range(0,len(a)),u))) for
u in range(2,len(a)+1)],[]))))
[(11885337.56, -11885337.56), (21197595.75, -11885337.56, -9312258.19)]
>>>
확인? – Idos
어떻게하면됩니까? –
출력이 여러 숫자로 나뉘어서 우선 순위가 제한되고 시작 위치가 달라질 수 있으므로이 점은 분명하지 않습니다. – Abra001