Skip to content

Instantly share code, notes, and snippets.

@hpaul
Last active January 10, 2020 14:10
Show Gist options
  • Save hpaul/611bb55cbbe81e47354517b37068ff72 to your computer and use it in GitHub Desktop.
Save hpaul/611bb55cbbe81e47354517b37068ff72 to your computer and use it in GitHub Desktop.
import itertools
A = 10
L = [1, 4, 5, 6, 1, 1, 2, 3]
rezultat = []
# `range` creaza o lista incepand de la primul argument pana la al doilea argument dar excluzandu-l [a, b)
# range(1, 2) returneaza `[1]`
# range(1, 3) returneaza `[1, 2]`
# `len` numara cate elemente sunt in lista
# Nu are sens sa formam combinatii de cate 1, asa ca pornim cu 2
for i in range(2, len(L)):
# Creeaza combinatii din lista L folosind libraria integrata in python `itertools`
# pentru i = 2 functia returneaza lista cu combinatii posibile
# [(1,4),(1,5),(1,6),(1,1),(1,1),(1,2),(1,3), etc...]
# pentru i = 3
# [(1,4,5),(1,4,6),(1,4,1), etc...]
combinatii = itertools.combinations(L, i)
# Pastreaza doar combinatiile ce implinesc conditia, adica suma elementelor egala cu A
# `filter` intereaza toate elementele din lista si verifica daca conditia din functie este adevarata
suma_egal_A = filter(lambda combinatie: sum(combinatie) == A, combinatii)
# Itereaza in rezultate si adauga in lista finala
for elem in suma_egal_A:
rezultat.append(elem)
print(rezultat)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment