Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/10/2014, 11:31
Avatar de razpeitia
razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 1 mes
Puntos: 1360
Respuesta: Compresión y filtrado de una lista con random.randint

Veo varios errores:

1. No son listas comprimidas, es list comprehension, comprehension como comprensión del verbo comprender y no comprimir.

2. Esto tiene sus pros y sus contras.
Código Python:
Ver original
  1. filtro = [1,2,3,10]
  2. filtrada = [random.randint(1,20) for i in range(10) if not i in filtro]

Esto lo puedes reescribir como
Código Python:
Ver original
  1. filtro = [1,2,3,10]
  2. filtrada = []
  3. for i in range(10):
  4.     if not i in filtro:
  5.         filtrada(random.randint(1,20))

Como puedes ver no hay manera de determinar si `random.randint(1,20)` esta en tu lista de filtrados, al menos usando esta forma.

Puedes hacerlo igual de fácil usando map y filter.
Código Python:
Ver original
  1. filtrada = filter(lambda x: x not in filtro, map(lambda x: random.randint(1, 20), range(10)))

O usando generadores + comprensión de listas
Código Python:
Ver original
  1. filtrada = [j for j in (random.randint(1,20) for i in range(10)) if j not in filtro]

3. Tu segundo código lo puedes reescribir como:
Código Python:
Ver original
  1. import random
  2. filtro = [1,2,3,4]
  3. filtrada = []
  4. for j in range(random.randint(1,20)):
  5.     for i in range(10):
  6.         if not j in filtro:
  7.             filtrada.append(i)
Como puedes ver, no tiene mucho sentido con lo que tratas de hacer.