2010-10-13 17 views

Respuesta

10
[y for x in range(3) for y in [x, x]] 
+3

Si uno quiere generatlize que uno podría escribir '[x] * 2' en lugar de '[x, x] '. – phimuemue

+0

@phimuemue: ¿cuál sería aún más lento – SilentGhost

2
>>> [int(x/2) for x in range(6)] 
[0, 0, 1, 1, 2, 2] 
+0

Tal vez usar el operador de división de enteros con 'x // 2' sería mejor que' int (x/2) '? En Python 2.7, 'timeit' muestra' // 'ser un poco más de dos veces más rápido, en Python 3.1, casi tres veces, para rangos grandes. – gotgenes

0

, podría bastar con esto:

[floor(x/2) for x in range(6)] 

edit1

[int(x/2) for x in range(6)] 

es la solución más portátil en el mismo sentido. Aunque las otras respuestas presentadas parecen mejores.

+0

'math.floor()' devuelve un 'float', por lo que no es lo mismo. –

+0

devuelve un entero en py3k, aunque – SilentGhost

4
>>> [i for i in range(3) for _ in range(2)] 
[0, 0, 1, 1, 2, 2] 
4

una solución general;

m = 3 #the list of integers 
n = 2 # of repetitions 
[x for x in range(m) for y in range(n)] 
0
[x/2 for x in range(6)] 

actualización:

[x//2 for x in range(6)] #ok now ? 
+0

solo para python 2.x ... – Ant

+0

yeah that right :) – mouad

+0

@Ant: cambiar a la sintaxis de py3k es trivial. Sin embargo, la misma solución fue dada por Ned – SilentGhost

1

Mi solución:

def explode_list(p,n): 
    arr=[] 
    track=0 

    if n==0: 
     return arr  
    while track<len(p): 
     m=1 
     while m<=n: 
      arr.append(p[track]) 
      m=m+1 
     track=track+1 

    return arr 
Cuestiones relacionadas