问题描述
R中的rep函数允许您重复一个向量,并带有额外的参数length.out可以指定最终向量/数组的长度,例如:
> rep(1:3,length.out = 10)
[1] 1 2 3 1 2 3 1 2 3 1
Python中有类似的方法吗? 我已经在Numpy中找到了重复功能,但是只能指定重复次数。
解决方法
您可以结合使用itertools cycle
和islice
方法:
>>> 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])