Все возможные комбинации с максимально возможным набором, но ограничены значением - PullRequest
0 голосов
/ 19 марта 2019

В Python модуль itertools.combination возвращает пустое значение, если заданный размер больше размера возможных комбинаций

>>> list(itertools.combinations([1,2,3], 4))
[]

Есть ли способ задать ограничивающий размер и вернуть функциюсамый большой набор, который он может создать?Примерно так:

>>> list(itertools.combinations([1,2,3], 4))
[(1, 2, 3)]

Нужно ли проверять, меньше ли количество предметов в коллекции, чем желаемый размер?

if len([1,2,3]) < 4:
    list(itertools.combinations([1,2,3], len([1,2,3])))
else:
    list(itertools.combinations([1,2,3], 4))

Ответы [ 2 ]

3 голосов
/ 19 марта 2019

Как насчет:

list(itertools.combinations([1,2,3], min(4, len([1,2,3])))

и действительно, вы можете написать функцию, чтобы обернуть ее вокруг:

def combinations(items, howmany):
    return list(itertools.combinations(items, min(howmany, len(items)))
1 голос
/ 19 марта 2019

Вы также можете использовать функцию lambda (хотя я не уверен, где преимущества перевешивают использование обычной функции)

In [118]: import itertools as it

In [121]: max_combs = lambda items, combs: it.combinations(items, min(combs, len(items)))

In [122]: list(max_combs([1,2,3], 4))
Out[122]: [(1, 2, 3)]
...