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