Foros Python

Versión completa: listas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
muy buenas disculpen me podrian ayudar explicando como puedo puedo dividir los valores de una lista
ya que tengo dos listas y quisiera dividir una cierta cantidad de elementos de una lista.
ejemplo
mis dos listas serian:

profesores ['juan','pedro','mario','david',arturo','alejandro']
materias['matematicas','lenguaje','dibujo,'arquitectura,'programacion']

ahora lo qu quiero que haga es que a cada uno de los profesores se le asigne una cantidad igual de materias.
si sobran materias me mande un mensaje o me pida ingresar una materia mas
Hola. Si tenés la misma cantidad de elementos en ambas listas podés usar la función zip. Por ejemplo:

  1. profesores = ['juan','pedro','mario','david','arturo']
  2. materias = ['matematicas','lenguaje','dibujo','arquitectura','programacion']
  3.  
  4. print(zip(profesores, materias))


El resultado es el siguiente:

Código:
[('juan', 'matematicas'), ('pedro', 'lenguaje'), ('mario', 'dibujo'), ('david', 'arquitectura'), ('arturo', 'programacion')]

De esta forma luego puedes recorrer la lista obtenida:

  1. for profesor, materia in zip(profesores, materias):
  2.     print(profesor, materia)


Para determinar si faltan materias o profesores tendrás que chequear la cantidad de elementos en cada lista.

  1. profesores = ['juan','pedro','mario','david','arturo']
  2. materias = ['matematicas','lenguaje','dibujo','arquitectura','programacion']
  3.  
  4. if len(profesores) == len(materias):
  5.     print(zip(profesores, materias))
  6. elif len(profesores) > len(materias):
  7.     print("Faltan materias")
  8. else:
  9.     print("Faltan profesores")


Si cada profesor puede contener múltiples materias, entonces habría qué determinar un parámetro en el cual basarse para realizar la asignación.

Un saludo.
(11-12-2016, 02:16 PM)Francisco escribió: [ -> ]Hola. Si tenés la misma cantidad de elementos en ambas listas podés usar la función zip. Por ejemplo:

  1. profesores = ['juan','pedro','mario','david','arturo']
  2. materias = ['matematicas','lenguaje','dibujo','arquitectura','programacion']
  3.  
  4. print(zip(profesores, materias))


El resultado es el siguiente:

Código:
[('juan', 'matematicas'), ('pedro', 'lenguaje'), ('mario', 'dibujo'), ('david', 'arquitectura'), ('arturo', 'programacion')]

De esta forma luego puedes recorrer la lista obtenida:

  1. for profesor, materia in zip(profesores, materias):
  2.     print(profesor, materia)


Para determinar si faltan materias o profesores tendrás que chequear la cantidad de elementos en cada lista.

  1. profesores = ['juan','pedro','mario','david','arturo']
  2. materias = ['matematicas','lenguaje','dibujo','arquitectura','programacion']
  3.  
  4. if len(profesores) == len(materias):
  5.     print(zip(profesores, materias))
  6. elif len(profesores) > len(materias):
  7.     print("Faltan materias")
  8. else:
  9.     print("Faltan profesores")


Si cada profesor puede contener múltiples materias, entonces habría qué determinar un parámetro en el cual basarse para realizar la asignación.

Un saludo.
Gracias por tu explicacion saves me interson baste esa funcion zip() pero no es lo que quiero  ya que lo que yo propongo es que en mi lista de profesores tenga tres o mas elementos o nombres y que mi lista de materias tenga seis o mas .
Si divides (materias/profesores)
tendre el tamaño  de cuantos elementos o materias le corresponderian a cada profesor en este caso serian dos materias pero asta ahy me he quedado.no tengo claro que deberia hacer
 print("todas las materias:",list_Materias)
 print("Todos los profesores:",List_Nombres_Profesores)
tamano=int(len(list_Materias)/len(List_Nombres_Profesores)) #
print("este es el tamano",tamano)
for i in range(1,tamano+1):
Bien. Si quieres establecer una condición para la cantidad de materias y profesores, puedes usar len(profesores) >= 3 y len(materias) >= 6. No estaría entendiendo el segundo paso, ¿crear una nueva lista o determinar si las materias se pueden distribuir de manera equitativa entre los profesores? En este último caso, puedes utilizar:

  1. res = len(materias) / len(profesores)
  2. puede_distribuirse = int(res) == res


La división dará un resultado con números decimales si no pueden distribuirse las maneras en iguales proporciones. Así, int(res) == res y por ende puede_distribuirse == True cuando puedan repartirse equitativamente.

Saludos.