Ha pasado un tiempo y estoy teniendo problemas para entender un algoritmo que intento hacer. Básicamente, tengo dos listas y quiero obtener todas las combinaciones de las dos listas.
Puede que no lo esté explicando correctamente, así que aquí hay un ejemplo.
name = 'a', 'b'
number = 1, 2
La salida en este caso sería:
1. A1 B2
2. B1 A2
La parte difícil es que podría tener más elementos en la variable "nombre" que elementos en la variable "número" (el número siempre será igual o menor que la variable nombre).
Estoy confundido sobre cómo hacer todas las combinaciones (¿anidado para bucle?) Y aún más confundido sobre la lógica para cambiar los elementos en la variable de nombre en caso de que haya más elementos en el nombre de los que están en la lista de números.
No soy el mejor programador, pero creo que puedo intentarlo si alguien puede ayudarme a aclarar la lógica / algoritmo para lograr esto. Así que me he quedado atascado en bucles anidados.
Actualizar:
Aquí está la salida con 3 variables y 2 números:
name = 'a', 'b', 'c'
number = 1, 2
salida:
1. A1 B2
2. B1 A2
3. A1 C2
4. C1 A2
5. B1 C2
6. C1 B2
fuente
Respuestas:
Nota : Esta respuesta es para la pregunta específica que se hizo anteriormente. Si está aquí desde Google y solo está buscando una forma de obtener un producto cartesiano en Python,
itertools.product
o una simple lista de comprensión puede ser lo que está buscando, vea las otras respuestas.Supongamos
len(list1) >= len(list2)
. Entonces lo que parecen querer es tomar todas las permutaciones de longitudlen(list2)
desdelist1
y relacionarlos con artículos de lista2. En python:Devoluciones
fuente
zip
y similar.La forma más simple es usar
itertools.product
:fuente
Puede ser más simple que el más simple de arriba:
sin ninguna importación
fuente
Estaba buscando una lista multiplicada por sí misma con solo combinaciones únicas, que se proporciona como esta función.
Aquí como un extracto de los documentos de Python sobre
itertools
Eso podría ayudarte a encontrar lo que estás buscando.fuente
Es posible que desee probar una comprensión de la lista de una línea:
fuente
La mejor manera de descubrir todas las combinaciones para un gran número de listas es:
el resultado será:
fuente
O la respuesta de KISS para listas cortas:
No es tan eficaz como las herramientas iterto, pero está utilizando Python, por lo que el rendimiento ya no es su principal preocupación ...
¡Me gustan todas las otras respuestas también!
fuente
Una pequeña mejora para la respuesta del interjay, para hacer que el resultado sea una lista plana.
referencia desde este enlace
fuente
Sin itertools
fuente
Respondiendo a la pregunta "dadas dos listas, encuentre todas las permutaciones posibles de pares de un elemento de cada lista" y utilizando la funcionalidad básica de Python (es decir, sin herramientas iterativas) y, por lo tanto, facilitando la replicación para otros lenguajes de programación:
Devoluciones
fuente
Las mejores respuestas a esto solo funcionan para longitudes específicas de las listas que se proporcionan.
Aquí hay una versión que funciona para cualquier longitud de entrada. También aclara el algoritmo en términos de los conceptos matemáticos de combinación y permutación.
Esto produce:
fuente