Je voudrais obtenir toutes les combinaisons d'une liste:
L = ["a","b","c"] combinations(L,length=2) # [("a","a"),("a","b"),("a","c"),("b","a"),("b","b"),("b","c"),("c","a"),("c","b"),("c","c")]
J'ai essayé
itertools.combinations ()
p>
mais cela a renvoyé
[('a', 'b'), ('a', 'c'), ('b', 'c')]
Lorsque j'utilise itertools.permutations ()
, il renvoie simplement les combinaisons avec la longueur de l'itération, ce qui n'est pas non plus ce que je veux.
Des bibliothèques / fonctions que je peux utiliser, sans écrire la mienne?
5 Réponses :
Une simple compréhension de liste peut également faire l'affaire.
Existe-t-il un moyen de le mettre dans une fonction, pour que je puisse faire des combinaisons (["a", "b", "c"], length = xyz)
?
Comme d'autres réponses le suggèrent, je suppose que pour une longueur variable, l'utilisation de itertools.product
pourrait être plus facile.
Vous pouvez utiliser itertools.product
avec repeat = 2
comme ceci:
from itertools import product L = ["a","b","c"] print(list(product(L, repeat=2))) #[('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
Cela devrait être la réponse acceptée, utiliser des permutations pour générer un produit est une mauvaise utilisation du module itertools.
Le module
itertools
a une fonction appelée produit
qui est ce que vous recherchez.
>>> L = ["a", "b", "c"] >>> list(itertools.product(L, repeat=2)) [('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
La fonction produit d'itertools offre une solution.
In [17]: from itertools import product In [18]: L = ["a","b","c"] In [19]: list(product(L, L)) Out[19]: [('a', 'a'), ('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'b'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('c', 'c')]
Vous pouvez utiliser le deuxième paramètre de itertools.permutations ()
:
itertools.permutations(iterable, r=None)
Sortie:
[('a', 'b'), ('a', 'c'), ('b', 'a'), ('b', 'c'), ('c', 'a'), ('c', 'b'), ('a', 'a'), ('b', 'b'), ('c', 'c')]
De la documentation:
from itertools import permutations L = ["a","b","c"] print([n for n in permutations(L,2)]+[(i,i) for i in L])
Renvoie des permutations successives de longueur r des éléments de l'itérable. Si r n'est pas spécifié ou vaut None, alors r prend par défaut la longueur de l'itérable et toutes les permutations complètes possibles sont générées.
Vous voulez dire
permutations
et noncombinaisons
. Essayez plutôt cette fonction.Est-ce que cela répond à votre question? Obtenir toutes les combinaisons avec n -length à partir d'une liste