R函数rep()复制向量的每个元素:
> rep(c("A","B"), times=2)
[1] "A" "B" "A" "B"
这类似于Python中的列表乘法:
>>> ["A","B"]*2
['A', 'B', 'A', 'B']
但是使用rep() R函数也可以指定向量的每个元素的重复次数:
> rep(c("A","B"), times=c(2,3))
[1] "A" "A" "B" "B" "B"
Python中有这样的函数吗?否则怎么定义它呢?顺便说一下,我也对这样一个复制数组的行的函数感兴趣。
发布于 2012-09-02 19:34:44
使用numpy
数组和numpy.repeat函数:
import numpy as np
x = np.array(["A", "B"])
print np.repeat(x, [2, 3], axis=0)
['A' 'A' 'B' 'B' 'B']
发布于 2012-09-02 19:37:03
既然你说的是"array“并提到R,你可能无论如何都想要使用numpy数组,然后使用:
import numpy as np
np.repeat(np.array([1,2]), [2,3])
编辑:既然你提到你也想重复行,我认为你应该使用numpy。np.repeat
有一个轴参数可以做到这一点。
除此之外,也许:
from itertools import izip, chain, repeat
list(chain(*(repeat(a,b) for a, b in izip([1,2], [2,3]))))
因为它没有假设你有一个要乘的列表或字符串。虽然我承认,将所有内容都作为参数传递到chain中可能并不完美,因此编写自己的迭代器可能会更好。
发布于 2012-09-02 19:33:22
l = ['A','B']
n = [2, 4]
您的示例使用的字符串已经是可迭代的。您可以生成类似于列表的结果字符串。
''.join([e * m for e, m in zip(l, n)])
'AABBBB'
更新:这里不需要列表理解:
''.join(e * m for e, m in zip(l, n))
'AABBBB'
https://stackoverflow.com/questions/12235552
复制相似问题