Comment scinder une liste de paires de toutes les façons possibles

J'ai une liste (disons 6 éléments pour des raisons de simplicité)

L = [0, 1, 2, 3, 4, 5]

et je veux le morceau en paires dans TOUS les façons possibles. Je montre quelques configurations:

[(0, 1), (2, 3), (4, 5)]
[(0, 1), (2, 4), (3, 5)]
[(0, 1), (2, 5), (3, 4)]

et ainsi de suite.
Ici (a, b) = (b, a) et de l'ordre de paires n'est pas important, c'est à dire

[(0, 1), (2, 3), (4, 5)] = [(0, 1), (4, 5), (2, 3)]

Le nombre total de ces configurations est 1*3*5*...*(N-1)N est la longueur de ma liste.

Comment puis-je écrire un générateur en Python qui me donne toutes les configurations possibles pour un arbitraire N?

  • Vous voudrez peut-être vérifier que le module standard itertools si vous ne l'avez pas déjà. Les fonctions il devrait être en mesure d'aider avec ce problème (peut-être la permutations, combinations ou product fonctions).
  • Si l'ordre n'est pas important, vous devriez probablement utiliser des ensembles ou des frozensets.
  • Dans la langue de la combinatoire, vous voulez générer tous les couplages parfaits d'un ensemble donné (dans un graphe complet).
InformationsquelleAutor Adam | 2011-03-19