All possible combinations for 3 digits of list never the same

前端 未结 3 672
温柔的废话
温柔的废话 2021-01-17 01:57

I have a list that looks like:

A
B
C
D
E
F
G

How do I solve this to find all combinations for 3 digits. The same letter cannot be used in

相关标签:
3条回答
  • 2021-01-17 02:10

    The Python Standard Library itertools already has the functionality you are trying to implement. Also you are using it in your code (funnily).

    itertools.combinations(a,3) returns all 3-combinations of the a. To convert that to "list of list" you should use .extend() as follows;

    x = ['a','b','c','d','e']
    n = 3
    import itertools
    permutations = []
    combinations = []
    combinations.extend(itertools.combinations(x,n))
    permutations.extend(itertools.permutations(x,n))
    
    print("Permutations;", permutations)
    print("\n")
    print("Combinations;", combinations)
    

    Additionally, I suggest you to search on "Combination, Permutation Difference". As I understood from your question; permutation is what you want. (If you run the code I shared, you will understand the difference easliy.)

    0 讨论(0)
  • 2021-01-17 02:26

    To understand how the solution process works, try the following:

    # get all combinations of n items from given list
    def getCombinations(items, n):
        if len(items) < n: return [] # need more items than are remaining 
        if n == 0: return [''] # need no more items, return the combination of no items
    
        [fst, *rst] = items
    
        # all combinations including the first item in the list
        including = [fst + comb for comb in getCombinations(rst, n-1)]
    
        # all combinations excluding the first item in the list
        excluding = getCombinations(rst, n)
    
        both = including + excluding
        return both
    
    x = ['a','b','c','d','e']
    n = 3
    print(getCombinations(x, n))
    # ['abc', 'abd', 'abe', 'acd', 'ace', 'ade', 'bcd', 'bce', 'bde', 'cde']
    
    0 讨论(0)
  • 2021-01-17 02:34

    combinations works on strings not lists, so you should first turn it into a string using: ''.join(x)

    from itertools import combinations
    x = ['a', 'b', 'c', 'd', 'e']
    n = 3
    aa = combinations(''.join(x), n)
    for comb in aa:
        print(''.join(comb))
    

    OUTPUT

    abc
    abd
    abe
    acd
    ace
    ade
    bcd
    bce
    bde
    cde
    

    Or as a one-liner:

    [''.join(comb) for comb in combinations(''.join(x), n)]
    
    0 讨论(0)
提交回复
热议问题