• Combinations

    def combinations(arr, r):
        for i in range(len(arr)):
            if r == 1:
                yield [arr[i]]
            else:
                for next in combinations(arr[i+1:], r-1):
                    yield [arr[i]] + next
    
    for _ in combinations([1,2,3,4,5], 2):
    		print(_)
    
  • Permutations

    def permutations(arr, r):
        for i in range(len(arr)):
            if r == 1:
                yield [arr[i]]
            else:
                for next in permutations(arr[:i] + arr[i+1:], r-1):
                    yield [arr[i]] + next
    
    for _ in permutations([1,2,3,4,5], 2):
    		print(_)
    
  • Combinations_with_replacement

    def combinations_with_replacement(arr, r):
        for i in range(len(arr)):
            if r == 1:
                yield [arr[i]]
            else:
                for next in combinations_with_replacement(arr[i:], r-1):
                    yield [arr[i]] + next
    
    for _ in combinations_with_replacement([1,2,3,4,5], 2):
    		print(_)
    
  • Product

    def product(arr, r):
        for i in range(len(arr)):
            if r == 1:
                yield [arr[i]]
            else:
                for next in product(arr, r-1):
                    yield [arr[i]] + next
    
    for _ in product([1,2,3,4,5], 2):
    		print(_)