7
votes

Python Obtenez toutes les permutations de chiffres

J'essaie d'afficher toutes les permutations possibles d'une liste de chiffres, par exemple si j'ai 334, je veux obtenir: XXX

J'ai besoin de pouvoir le faire pour tout Ensemble de chiffres jusqu'à environ 12 chiffres de longs.

Je suis sûr que c'est probablement assez simple en utilisant quelque chose comme itoTools.combinations, mais je ne peux pas vraiment obtenir la syntaxe droite.

TIA Sam


0 commentaires

4 Réponses :


3
votes

Vous voulez des permutations, pas des combinaisons. Voir: Comment générer toutes les permutations d'une liste dans Python xxx

Notez qu'il permute les deux 3 (qui est la bonne chose à faire mathématiquement), mais n'est pas la même que votre exemple. Cela ne fera une différence que s'il existe des nombres dupliqués dans votre liste.


0 commentaires

26
votes
>>> lst = [3, 3, 4]
>>> import itertools
>>> set(itertools.permutations(lst))
{(3, 4, 3), (3, 3, 4), (4, 3, 3)}

3 commentaires

+1, des permutations distinctes d'une liste. SET (LISTE ()) à la sauvetage à nouveau.


@Seth il suffit d'utiliser itTools.combinations à la place.


@nbro - Les combinaisons et les permutations sont des opérations différentes (mais liées). Dans ce cas, iTERTools.combinations ([3, 3, 4], 3) donnerait simplement l'ensemble d'origine, et non la liste des arrangements des nombres dans l'ensemble (c.-à-d. Le permutations ).



5
votes

sans itTools xxx

sortie xxx


1 commentaires

Suivait cette approche mais ne pouvait pas comprendre ce que ces deux boucles font réellement. Pouvez-vous trouver un peu de texte à la réponse?



1
votes

J'utiliserais iTertools , mais si vous avez eu à implémenter cela vous-même, voici le code qui renvoie toutes les permutations d'une taille spécifiée pour une liste de valeurs.

Exemple: valeurs = [1,2,3] , taille = 2 => [[3, 2], [2, 3], [2, 1], [3 , 1], [1, 3], [1, 2]] xxx


1 commentaires

C'est une réponse cool, j'ai aimé, mais cela pourrait être bon si les valeurs soutiennent également zéro. Ex: valeurs = [0,1,2] Cette logique échoue. :)