Este tutorial ha sido evaluado por especialistas para que tengas la seguridad de la exactitud de nuestra esta sección.
Solución:
Usar numpy
matrices y la función numpy.repeat:
import numpy as np
x = np.array(["A", "B"])
print np.repeat(x, [2, 3], axis=0)
['A' 'A' 'B' 'B' 'B']
No estoy seguro de si hay una función integrada disponible para esto, pero puedes probar algo como esto:
>>> lis = ["A", "B"]
>>> times = (2, 3)
>>> sum(([x]*y for x,y in zip(lis, times)),[])
['A', 'A', 'B', 'B', 'B']
Tenga en cuenta que sum()
corre en tiempo cuadrático. Por lo tanto, no es la forma recomendada.
>>> from itertools import chain, izip, starmap
>>> from operator import mul
>>> list(chain.from_iterable(starmap(mul, izip(lis, times))))
['A', 'A', 'B', 'B', 'B']
Comparaciones de tiempo:
>>> lis = ["A", "B"] * 1000
>>> times = (2, 3) * 1000
>>> %timeit list(chain.from_iterable(starmap(mul, izip(lis, times))))
1000 loops, best of 3: 713 µs per loop
>>> %timeit sum(([x]*y for x,y in zip(lis, times)),[])
100 loops, best of 3: 15.4 ms per loop
Ya que dices “array” y mencione R. Es posible que desee usar matrices numpy de todos modos, y luego use:
import numpy as np
np.repeat(np.array([1,2]), [2,3])
EDITAR: Como mencionas que también quieres repetir filas, creo que deberías usar numpy. np.repeat
tiene un argumento de eje para hacer esto.
Aparte de eso, tal vez:
from itertools import izip, chain, repeat
list(chain(*(repeat(a,b) for a, b in izip([1,2], [2,3]))))
Como no asume que tiene una lista o string multiplicar. Aunque lo admito, pasar todo como argumento a la cadena tal vez no sea perfecto, por lo que escribir su propio iterador puede ser mejor.
Nos puedes añadir valor a nuestro contenido informacional aportando tu experiencia en las anotaciones.