Python prime generador en una línea

Estoy tratando de crear un generador de números primos en una línea de Python solo como un ejercicio divertido.

El siguiente código funciona como se esperaba, pero es demasiado lento:

primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,i) for k in xrange(1,i)])
for i in primes(10):
   print i,

Así que intenté hacerlo solo revisando la raíz cuadrada de j y k:

primes = lambda q: (i for i in xrange(1,q) if i not in [j*k for j in xrange(1,int(round(math.sqrt(i)+1))) for k in xrange(1,int(round(math.sqrt(i)+1)))])
for i in primes(10):
   print i,

Pero produce:2 3 5 6 7 8

Así que debe haber algo mal con mis índices j y k, pero no tengo ni idea.

Respuestas a la pregunta(4)

Su respuesta a la pregunta