Получение всех уникальных комбинаций в питоне - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь выяснить, как получить комбинации списков списков на основе одного элемента.

Итак, давайте предположим, что у меня есть этот список списков

    [["blue", 1], ["blue", 3], ["red", 6], ["green", 5]] 

Как бы я получил эти комбинации в Python:

    [["blue", 1], ["red", 6], ["green", 5]], [["blue", 3], ["red", 6], ["green", 5]]

1 Ответ

0 голосов
/ 06 июля 2018

Это можно сделать с помощью groupby и product :

data = [["blue", 1], ["blue", 3], ["red", 6], ["green", 5]]
groups = []
for k, g in itertools.groupby(data, key=lambda item: item[0]):
    groups.append(list(g))
print(list(itertools.product(*groups)))
# [(['blue', 1], ['red', 6], ['green', 5]), (['blue', 3], ['red', 6], ['green', 5])]

# just for understanding how it works:
print(groups)
# [[['blue', 1], ['blue', 3]], [['red', 6]], [['green', 5]]]
...