все комбинации элементов в списке. все содержащие предметы - PullRequest
0 голосов
/ 16 октября 2019

ищет простой способ получить все комбинации: ввод: список строк

list = ["a", "b", "c", "d"]

вывод: вложенный список строк

[["abcd"],["abc", "d"],["ab","cd"],["a","bcd"],["ab","c","d"],["a","bc","d"],["a","b","cd"],["a","b","c","d"]]

1 Ответ

2 голосов
/ 16 октября 2019

Вы можете использовать рекурсию с генератором:

def combo(d):
  yield d
  if len(d) > 1:
    for i in range(len(d)-1):
       yield from combo([*d[:i], d[i]+d[i+1], *d[i+2:]])

print(list(set(map(tuple, combo(["a", "b", "c", "d"])))))

Выход:

[('a', 'b', 'c', 'd'), ('abcd',), ('ab', 'c', 'd'), ('abc', 'd'), ('a', 'b', 'cd'), ('ab', 'cd'), ('a', 'bcd'), ('a', 'bc', 'd')]
...