Print out 12, 13, 14, 23, 24, 34
def combi (k,arr):
if k == 1:
return [[i] for i in arr]
elif k == 0 or len(arr) == 0:
return []
L = []
for i in range (0,len(arr)):
arr2 = arr[:]
arr2.remove(arr[i])
for v in combi (k-1 , arr2):
L.append( [arr[i]] + v )
return L
print combi ( 2 , range(1,4) )
One limitation with this function is that it returns 14 but also 41
The following code solves this problem
def combi2 (k,arr):
if k == 1:
return [[i] for i in arr]
elif k == 0 or len(arr) == 0:
return []
L = []
arr2 = arr[:]
while len(arr2) > 0:
val = arr2.pop(0)
for v in combi (k-1 , arr2):
L.append( [val] + v )
return L
Aucun commentaire:
Enregistrer un commentaire