En Python, le module itertools.combination renvoie vide si la taille définie donnée est supérieure à la taille des combinaisons possibles

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

Existe-t-il un moyen de donner une taille limite et de faire en sorte que la fonction renvoie le plus grand ensemble qu'elle puisse créer? Quelque chose comme ça:

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

Dois-je vérifier si le nombre d'articles de la collection est inférieur à la taille souhaitée?

if len([1,2,3]) < 4:
    list(itertools.combinations([1,2,3], len([1,2,3])))
else:
    list(itertools.combinations([1,2,3], 4))
0
Ricardo Jesus 19 mars 2019 à 03:27

2 réponses

Meilleure réponse

Que diriez-vous:

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

Et en effet, vous pouvez écrire une fonction pour l'enrouler:

def combinations(items, howmany):
    return list(itertools.combinations(items, min(howmany, len(items)))
3
adrtam 19 mars 2019 à 00:30

Vous pouvez également utiliser une fonction lambda (même si je ne sais pas où les avantages l'emportent sur l'utilisation d'une fonction normale)

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)]
1
aydow 19 mars 2019 à 01:01