str sentencias operaciones numeros numero letras declarar convertir con como caracter cadena asignaciones python list combinatorics itertools

operaciones - sentencias python



¿Cómo obtener todas las asignaciones entre dos listas? (2)

Puedes hacerlo con itertools.product y zip

from itertools import product print [zip(A, item) for item in product(B, repeat=len(A))]

Salida

[[(''a'', 1), (''b'', 1), (''c'', 1)], [(''a'', 1), (''b'', 1), (''c'', 2)], [(''a'', 1), (''b'', 2), (''c'', 1)], [(''a'', 1), (''b'', 2), (''c'', 2)], [(''a'', 2), (''b'', 1), (''c'', 1)], [(''a'', 2), (''b'', 1), (''c'', 2)], [(''a'', 2), (''b'', 2), (''c'', 1)], [(''a'', 2), (''b'', 2), (''c'', 2)]]

product(B, repeat=len(A)) produce

[(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2), (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

Luego seleccionamos cada elemento del producto y lo comprimimos con A , para obtener el resultado deseado.

Tenemos dos listas, A y B:

A = [''a'',''b'',''c''] B = [1, 2]

¿Hay alguna forma en la que los conjuntos de mapas entre A y B contengan 2 ^ n (aquí 2 ^ 3 = 8)? Es decir:

[(a,1), (b,1), (c,1)] [(a,1), (b,1), (c,2)] [(a,1), (b,2), (c,1)] [(a,1), (b,2), (c,2)] [(a,2), (b,1), (c,1)] [(a,2), (b,1), (c,2)] [(a,2), (b,2), (c,1)] [(a,2), (b,2), (c,2)]

Usando itertools.product , es posible obtener todas las tuplas:

import itertools as it P = it.product(A, B) [p for p in P]

Lo que da:

Out[3]: [(''a'', 1), (''a'', 2), (''b'', 1), (''b'', 2), (''c'', 1), (''c'', 2)]


import itertools as it A = [''a'',''b'',''c''] B = [1, 2] for i in it.product(*([B]*len(A))): print(list(zip(A, i)))

salidas:

[(''a'', 1), (''b'', 1), (''c'', 1)] [(''a'', 1), (''b'', 1), (''c'', 2)] [(''a'', 1), (''b'', 2), (''c'', 1)] [(''a'', 1), (''b'', 2), (''c'', 2)] [(''a'', 2), (''b'', 1), (''c'', 1)] [(''a'', 2), (''b'', 1), (''c'', 2)] [(''a'', 2), (''b'', 2), (''c'', 1)] [(''a'', 2), (''b'', 2), (''c'', 2)]

No estoy seguro si es muy pythonic, es si lo it.product(*([B]*len(A))) , porque usa múltiples funciones de lenguaje específicas de python. Pero en realidad es demasiado críptico para ser pythonic ... B se repite n veces en función de la longitud de A y se desempaqueta en función del producto.