简体   繁体   中英

Python: Generating Non Repeating Permutations

I would like to be able to quickly and efficiently generate all possible permutations of a given list without any repeats, for example:

if selecting two items form ['A','B','C','D'] the possible permutations would be:

['A','B']
['A','C']
['A','D']
['B','C']
['B','D']
['C','D']

Where ['A','B'] is equal to -and therefore a repeat of- ['B','A']

For the simplest code that does what you specified, try this:

letters_list = ['A','B','C','D'] 
for i in range(4):
    for j in range(4):
        if i < j:
            a = letters_list[i]
            b = letters_list[j]
            print([a,b])

Or if you want a more general code:

letters_list = ['A','B','C','D','E','F','G'] 
for i in range(len(letters_list)):
    for j in range(len(letters_list)):
        if i < j:
            a = letters_list[i]
            b = letters_list[j]
            print([a,b])

And if, for example, you wanted all combinations of 3 letters:

letters_list = ['A','B','C','D','E','F','G'] 
for i in range(len(letters_list)):
    for j in range(len(letters_list)):
        for k in range(len(letters_list)):
            if i < j < k:
                a = letters_list[i]
                b = letters_list[j]
                c = letters_list[k]
                print([a,b,c])

And if you prefer shorter code to readable code:

letters_list = ['A','B','C','D','E','F','G'] 
for i in range(len(letters_list)):
    for j in range(len(letters_list)):
        for k in range(len(letters_list)):
            if i < j < k:
            print([letters_list[i],letters_list[j],letters_list[k]])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM