重复数组直到一定长度

问题描述

R中的rep函数允许您重复一个向量,并带有额外的参数length.out可以指定最终向量/数组的长度,例如:

> rep(1:3,length.out = 10)
 [1] 1 2 3 1 2 3 1 2 3 1

Python中有类似的方法吗? 我已经在Numpy中找到了重复功能,但是只能指定重复次数

解决方法

您可以结合使用itertools cycleislice方法:

>>> from itertools import islice,cycle
>>> list(islice(cycle([1,2,3]),10))
[1,3,1,1]
,

您可以将所需的长度除以给定的长度,然后知道需要多少个完整副本以及其余部分所需的部分副本。

>>> a = [1,3]
>>> n = 10

>>> q,r = divmod(n,len(a))
>>> q * a + a[:r]
[1,1]
,

这应该满足您对任何序列(列表,元组,字符串等)的支持,只要它们支持+和*,这对于输出有意义。

def repeat(seq,length):
    multiple,remainder = divmod(length,len(seq))
    return seq * multiple + seq[:remainder]

>>> repeat([1,3],10)
[1,1]

>>> repeat('abc',10)
'abcabcabca'

>>> repeat([1,2)
[1,2]
,

当然,范围1-4表示输出将为1,3。 n定义您要重复的次数。和length定义您要保留的最大长度。

n=2
length=5
print((list(range(1,4))*n)[:length])