N escolha N / 2 sublistas de uma lista
Existe uma maneira eficiente no Python de obter todas as partições de uma lista de tamanhon
em dois subconjuntos de tamanhon/2
? Eu quero obter alguma construção iterativa, de modo que cada iteração forneça dois subconjuntos não sobrepostos da lista original, cada subconjunto tendo tamanhon/2
.
Por exemplo:
A = [1,2,3,4,5,6] # here n = 6
# some iterative construct
# in each iteration, a pair of subsets of size n/2
# subsets = [[1,3,4], [2,5,6]] for example for one of the iterations
# subsets = [[1,2,5],[3,4,6]] a different iteration example
Os subconjuntos não devem se sobrepor, por exemplo[[1,2,3], [4,5,6]]
é válido mas[[1,2,3], [3,4,5]]
não é. A ordem dos dois subconjuntos não importa, p.[[1,2,3], [4,5,6]]
não conta como diferente de[[4,5,6], [1,2,3]]
e, portanto, apenas um desses dois deve aparecer em uma iteração. A ordem em cada subconjunto também não importa, portanto[[1,2,3], [4,5,6]]
, [[1,3,2], [4,5,6]]
, [[3,2,1], [6,5,4]]
, etc. todos contam como o mesmo e, portanto, apenas um deles deve aparecer na iteração inteira.