Возможные комбинации нескольких списков - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть набор переменных в списке

list = [ 'A', 'B', 'C']

Я итеративно удаляю одну переменную из списка и добавляю ее к исходному списку в списке списков, останавливаясь, когда в списке только один элемент,Например, вывод с использованием списка выше будет:

list_of_var_lists = [
[['A', 'B', 'C'], ['A', 'B'], ['A']],
[['A', 'B', 'C'], ['A', 'B'], ['B']],
[['A', 'B', 'C'], ['A', 'C'], ['A']],
[['A', 'B', 'C'], ['A', 'C'], ['C']],
[['A', 'B', 'C'], ['B', 'C'], ['B']],
[['A', 'B', 'C'], ['B', 'C'], ['C']]
]

Как бы я сделал для списка любого размера?

Большое спасибо, J

1 Ответ

0 голосов
/ 26 февраля 2019

Вот решение, использующее itertools.permutations .Это генератор, а не массивные списки списков списков, поскольку число таких списков возрастает гиперэкспоненциально:

import itertools

def list_unpacker(ls):
    for p in itertools.permutations(ls):
        sublists = []
        current_list = ls[:]
        sublists.append(current_list)
        for x in p[:-1]:
            current_list = [y for y in current_list if y != x]
            sublists.append(current_list)
        yield sublists

for lists in list_unpacker(['a','b','c']):
    print(lists)

Вывод:

[['a', 'b', 'c'], ['b', 'c'], ['c']]
[['a', 'b', 'c'], ['b', 'c'], ['b']]
[['a', 'b', 'c'], ['a', 'c'], ['c']]
[['a', 'b', 'c'], ['a', 'c'], ['a']]
[['a', 'b', 'c'], ['a', 'b'], ['b']]
[['a', 'b', 'c'], ['a', 'b'], ['a']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...