首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python中的r函数rep() (复制列表/向量的元素)

Python中的r函数rep() (复制列表/向量的元素)
EN

Stack Overflow用户
提问于 2012-09-02 19:23:06
回答 6查看 73.4K关注 0票数 65

R函数rep()复制向量的每个元素:

代码语言:javascript
运行
复制
> rep(c("A","B"), times=2)
[1] "A" "B" "A" "B"

这类似于Python中的列表乘法:

代码语言:javascript
运行
复制
>>> ["A","B"]*2
['A', 'B', 'A', 'B']

但是使用rep() R函数也可以指定向量的每个元素的重复次数:

代码语言:javascript
运行
复制
> rep(c("A","B"), times=c(2,3))
[1] "A" "A" "B" "B" "B"

Python中有这样的函数吗?否则怎么定义它呢?顺便说一下,我也对这样一个复制数组的行的函数感兴趣。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-09-02 19:34:44

使用numpy数组和numpy.repeat函数:

代码语言:javascript
运行
复制
import numpy as np

x = np.array(["A", "B"])
print np.repeat(x, [2, 3], axis=0)

['A' 'A' 'B' 'B' 'B']
票数 69
EN

Stack Overflow用户

发布于 2012-09-02 19:37:03

既然你说的是"array“并提到R,你可能无论如何都想要使用numpy数组,然后使用:

代码语言:javascript
运行
复制
import numpy as np
np.repeat(np.array([1,2]), [2,3])

编辑:既然你提到你也想重复行,我认为你应该使用numpy。np.repeat有一个轴参数可以做到这一点。

除此之外,也许:

代码语言:javascript
运行
复制
from itertools import izip, chain, repeat
list(chain(*(repeat(a,b) for a, b in izip([1,2], [2,3]))))

因为它没有假设你有一个要乘的列表或字符串。虽然我承认,将所有内容都作为参数传递到chain中可能并不完美,因此编写自己的迭代器可能会更好。

票数 5
EN

Stack Overflow用户

发布于 2012-09-02 19:33:22

代码语言:javascript
运行
复制
l = ['A','B']
n = [2, 4]

您的示例使用的字符串已经是可迭代的。您可以生成类似于列表的结果字符串。

代码语言:javascript
运行
复制
''.join([e * m for e, m in zip(l, n)])
'AABBBB'

更新:这里不需要列表理解:

代码语言:javascript
运行
复制
''.join(e * m for e, m in zip(l, n))
'AABBBB'
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12235552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档