1
votes

Obtenez toutes les combinaisons d'une liste en Python

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?


2 commentaires

Vous voulez dire permutations et non combinaisons . Essayez plutôt cette fonction.


Est-ce que cela répond à votre question? Obtenir toutes les combinaisons avec n -length à partir d'une liste


5 Réponses :


2
votes

Une simple compréhension de liste peut également faire l'affaire. XXX


2 commentaires

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.



3
votes

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')]


1 commentaires

Cela devrait être la réponse acceptée, utiliser des permutations pour générer un produit est une mauvaise utilisation du module itertools.



1
votes

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')]


0 commentaires

1
votes

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')]


0 commentaires

-1
votes

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.


0 commentaires