2012-02-18 16 views
9

Nota: Estoy trabajando en Python en esto.¿Cómo puedo generar permutaciones de longitud LEN dada una lista de N elementos?

Por ejemplo, dada una lista:

list = ['a','b','c','d','e','f','g','h','i','j'] 

quiero para generar una lista de listas con todas las posibles combinaciones de 3 elementos:

['a','b','c'], 
['a','b','d'], 
['a','b','e'] 

Las permutaciones no deben utilizar el mismo elemento dos veces en una permutación, pero el orden es importante y representa permutaciones distintas que deben incluirse, por ejemplo,

['a','b','c'], 
['a','c','b'] 

Ambos deben estar incluidos.

"3" es la longitud mágica de las permutaciones que quiero generar, pero no me gustaría ver una solución para las permutaciones de longitud arbitrarias.

¡Gracias por cualquier ayuda!

+1

¿Has pensado alguna vez sobre el problema? ¿Hay algún punto en el que te quedes estancado? – simchona

+2

Odio decirlo, pero googlear "permutations python list" dio http://docs.python.org/library/itertools.html. – simchona

+0

Alguien más respondió ya, pero sí, lo pensé un poco, pero después de otros aspectos del proyecto con el que esto está relacionado, he entrado en un bloqueo cerebral y no podía pensar más allá de un método de fuerza bruta con muchas fealdad. – Promethean

Respuesta

13
itertools.permutations(my_list, 3) 
+0

¡Ahh, gracias! ¡No estaba al tanto de ese módulo! ¡Eso es lo que obtengo por no estar al día con los cambios en la nueva versión! (Mis necesidades de programación son algunos programas pequeños al año) – Promethean

12

Asumiendo que estamos en Python 2.6 o posterior:

from itertools import permutations 
for i in permutations(your_list, 3): 
    print i 
+0

Gracias, me mantengo actualizado en la distribución con 3.2 pero mi aprendizaje fue anterior a 2.2, así que no estaba al tanto de esto. – Promethean

+0

¡Itertools es tu amigo! – michaelfilms

+0

Jesús, las herramientas en python son increíbles. Imagina hacer esto en C o C++ –

0

Se debe utilizar la función del módulo de permutationsitertools.

>>> import itertools 
>>> lst = ['a','b','c','d','e','f','g','h','i','j'] 
>>> itertools.permutations(lst, 3) 

O, si usted realmente desea conseguir combinaciones, a continuación, utilizar la función combinations.

Cuestiones relacionadas