Ver Mensaje Individual
  #25 (permalink)  
Antiguo 10/10/2010, 11:27
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: FAQ's de Python

Pregunta: ¿Como usar list comprehension?
Respuesta: List comprehension es una utilidad para crear listas de manera consistente sin el uso de map, filter, reduce o lambda.



Ejemplo 1:
Código Python:
Ver original
  1. vec = [2, 4, 6]
  2. vec3 = [3*x for x in vec]
  3. #>>> vec3 = [6, 12, 24]

Seria lo mismo que tener:
Código Python:
Ver original
  1. vec = [2, 4, 6]
  2. vec3 = []
  3. for x in vec:
  4.     vec3.append(3*x)
  5. #>>> vec3 = [6, 12, 24]

Usando map y lambda seria:
Código Python:
Ver original
  1. vec = [2, 4, 6]
  2. vec3 = map(lambda x: 3*x, vec)
  3. #>>> vec3 = [6, 12, 24]


Ademas puedes usar la sentencia if:
Ejemplo 2:
Código Python:
Ver original
  1. vec = [2, 4, 6, 7, 3, 1]
  2. vec3 = [x for x in vec if x > 3]
  3. #>>> vec3 = [4, 6, 7]

Código Python:
Ver original
  1. vec = [2, 4, 6, 7, 3, 1]
  2. vec3 = []
  3. for x in vec:
  4.     if x > 3:
  5.         vec3.append(x)
  6. #>>> vec3 = [4, 6, 7]

Código Python:
Ver original
  1. vec = [2, 4, 6, 7, 3, 1]
  2. filter(lambda x: x > 3, vec)
  3. #>>> vec3 = [4, 6, 7]


También puedes anidar mas de un for:
Ejemplo 3:
Código Python:
Ver original
  1. vec1 = [1, 2, 3]
  2. vec2 = [4, 5, 6]
  3. vec3 = [(x, y) for x in vec1 for y in vec2]
  4. #>>> vec3 = [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]

Código Python:
Ver original
  1. vec1 = [1, 2, 3]
  2. vec2 = [4, 5, 6]
  3. vec3 = []
  4. for x in vec1:
  5.     for y in vec2:
  6.         vec3.append((x, y))
  7. #>>> vec3 = [(1, 4), (1, 5), (1, 6), (2, 4), (2, 5), (2, 6), (3, 4), (3, 5), (3, 6)]