una todas repeticion posibles permutar permutaciones permutacion numeros numero lista las conjunto con combinatoria combinar combinaciones algoritmo python

todas - permutaciones python



permutaciones de dos listas en python (5)

Tengo dos listas como:

list1 = [''square'',''circle'',''triangle''] list2 = [''red'',''green'']

¿Cómo puedo crear todas las permutaciones de estas listas, como esta:

[ ''squarered'', ''squaregreen'', ''redsquare'', ''greensquare'', ''circlered'', ''circlegreen'', ''redcircle'', ''greencircle'', ''trianglered'', ''trianglegreen'', ''redtriangle'', ''greentriangle'' ]

¿Puedo usar itertools para esto?


Creo que lo que estás buscando es el producto de dos listas, no las permutaciones:

#!/usr/bin/env python import itertools list1=[''square'',''circle'',''triangle''] list2=[''red'',''green''] for shape,color in itertools.product(list1,list2): print(shape+color)

rendimientos

squarered squaregreen circlered circlegreen trianglered trianglegreen

Si te gustaría tanto squarered como redsquare , entonces podrías hacer algo como esto:

for pair in itertools.product(list1,list2): for a,b in itertools.permutations(pair,2): print(a+b)

o, para convertirlo en una lista:

l=[a+b for pair in itertools.product(list1,list2) for a,b in itertools.permutations(pair,2)] print(l)

rendimientos

[''squarered'', ''redsquare'', ''squaregreen'', ''greensquare'', ''circlered'', ''redcircle'', ''circlegreen'', ''greencircle'', ''trianglered'', ''redtriangle'', ''trianglegreen'', ''greentriangle'']


Desea el método itertools.product , que le dará el producto cartesiano de ambas listas.

>>> import itertools >>> a = [''foo'', ''bar'', ''baz''] >>> b = [''x'', ''y'', ''z'', ''w''] >>> for r in itertools.product(a, b): print r[0] + r[1] foox fooy fooz foow barx bary barz barw bazx bazy bazz bazw

Su ejemplo solicita el producto bidireccional (es decir, desea ''xfoo'' así como ''foox''). Para conseguir eso, simplemente haz otro producto y encadena los resultados:

>>> for r in itertools.chain(itertools.product(a, b), itertools.product(b, a)): ... print r[0] + r[1]


En cualquier caso, puedes hacer algo como:

perms = [] for shape in list1: for color in list2: perms.append(shape+color)


Qué tal si

[x + y for x in list1 for y in list2] + [y + x for x in list1 for y in list2]

Ejemplo de interacción de IPython:

In [3]: list1 = [''square'', ''circle'', ''triangle''] In [4]: list2 = [''red'', ''green''] In [5]: [x + y for x in list1 for y in list2] + [y + x for x in list1 for y in list2] Out[5]: [''squarered'', ''squaregreen'', ''circlered'', ''circlegreen'', ''trianglered'', ''trianglegreen'', ''redsquare'', ''greensquare'', ''redcircle'', ''greencircle'', ''redtriangle'', ''greentriangle'']


>>> import itertools >>> map(''''.join, itertools.chain(itertools.product(list1, list2), itertools.product(list2, list1))) [''squarered'', ''squaregreen'', ''circlered'', ''circlegreen'', ''trianglered'', ''trianglegreen'', ''redsquare'', ''redcircle'', ''redtriangle'', ''greensquare'', ''greencircle'', ''greentriangle'']