Python программа для получения подмножеств списка в заказе - PullRequest
0 голосов
/ 13 января 2020
def combinations(s, r):   
    # combinations('ABCD', 2) --> AB AC AD BC BD CD  
    pool = tuple(s)  
    n = len(pool)

    indices = list(range(r))
    yield tuple(pool[i] for i in indices)
    while True:
        for i in reversed(range(r)):
            if indices[i] != i + n - r:
                break
        else:
            return
        indices[i] += 1
        for j in range(i+1, r):
            indices[j] = indices[j-1] + 1
        yield tuple(pool[i] for i in indices)

def findsubsets(s, n):

    for i in range(0,size):
        return list(map(set, combinations(s, n)))

size = int(input("list size:"))      
s = list(input("enter list:"))   
for x in range(0,size):   
    print("list:",s)     
n = 2

У меня есть программа Python для получения таких подмножеств. Когда я вхожу на вход {A, B, C, D}, у меня есть правильные выходы, но порядок выходов неправильный. Входы такие:

**list size:4    
enter list:abcd    
list: ['a', 'b', 'c', 'd']      
list: ['a', 'b', 'c', 'd']       
list: ['a', 'b', 'c', 'd']    
list: ['a', 'b', 'c', 'd']  
The output is:       
[{'b', 'a'}, {'c', 'a'}, {'d', 'a'}, {'c', 'b'}, {'d', 'b'}, {'d', 'c'}]     
I need to have output like this:       
[{'a', 'b'}, {'a', 'c'}, {'a', 'd'}, {'b', 'c'}, {'b', 'd'}, {'c', 'd'}]       
Can you help me?** 

1 Ответ

0 голосов
/ 13 января 2020

Проблема, о которой говорилось в комментариях, заключается в том, что вы используете sets, поэтому они представляют собой неупорядоченные наборы данных. Если вы хотите сохранить порядок, вы можете сделать что-то вроде этого:

import itertools

iterable = ['a', 'b', 'c', 'd']
output = list(itertools.combinations(iterable, 2))
print(output)

>>> [('a', 'b'), ('a', 'c'), ('a', 'd'), ('b', 'c'), ('b', 'd'), ('c', 'd')]
...