Создание всех возможных подмножеств при добавлении (см. Пример, чтобы было понятнее) - PullRequest
0 голосов
/ 16 июня 2020

Мне очень жаль, что заголовок очень сбивает с толку, потому что уже немного сбивает с толку думать о том, как сказать это на моем родном языке.

Пример будет намного понятнее, чем я могу быть с предложениями:

Допустим, у меня есть список:

l = [1, 2, 3]

Я хочу, чтобы мой вывод выглядел так:

out = [ [1, 2, 3], [3, 3], [1, 5], [4, 2], [6] ]

Итак, в основном, вы составляете этот список:

[    l, [ l[0]+l[1], l[2] ], [ l[0], l[1]+l[2] ], [ l[0]+l[2], l[1] ], [ l[0]+l[1]+l[2] ]    ]

Я уже нашел способ сделать это, это уродливая функция, и мне было интересно, есть ли красивый способ c pythoni для этого. Я думал об использовании functools.reduce (), но не могу понять, как это сделать.

Заранее спасибо.

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать combinations из itertools

from itertools import combinations

l = [1,2,3]
res = [l]
for i in list(combinations(l, 2)):
      value = 0
      for inx in i:
            value += l[inx-1]
      res.append([value, l[sum(set(l) - set(i)) - 1]])
res.append([sum(l)])
print(res)

Вывод

[[1, 2, 3], [3, 3], [4, 2], [5, 1], [6]]

Направление списка немного отличается от примера, но я надеюсь, что это поможет вам .

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