r-在Python上连接向量字符串



R中,我可以使用paste:将字符串向量连接在一起

> a = 1:3
> a
[1] 1 2 3
> b = 4:6
> b
[1] 4 5 6
> d = 7:9
> d
[1] 7 8 9
> together = paste(a, b, d, sep='-')
> together 
[1] "1-4-7" "2-5-8" "3-6-9"

我怎么能在Python中做同样的事情?

R中的矢量化运算可以在Python中通过列表理解或内置函数map()来近似。

在这里,我们使用zip对这三个列表进行并行迭代。

a = range(1,4)
b = range(4,7)
c = range(7,10)
together = ['-'.join(str(i) for i in z) for z in zip(a,b,c)]

输出:

>>> together
['1-4-7', '2-5-8', '3-6-9']

上面代码中的一个微妙之处是,联接的参数是一个生成器表达式,这意味着它的求值是惰性的。为了更懒惰,可以将zip替换为itertools包中的izip。

您自己的功能如何:

def f(*args):
return '-'.join([str(a) for a in args])

然后map

map(f, a, b, c)
# ['1-4-7', '2-5-8', '3-6-9']

或者为了好玩(以及任何数量的值):

map(lambda *args: '-'.join(map(str, args), a, b, c)

添加一行,假设3个元素列出

l1 = range(1,4)
l2 = range(4,7)
l3 = range(7,10)
map(lambda x,y,z: '%s-%s-%s' % (x,y,z), l1, l2,l3)
a = range(1,4)
b = range(4,7)
c = range(7,10)
together = ['{}-{}-{}'.format(*x) for x in zip(a, b, c)]

编辑:

zip(a,b,c)(a[0], b[0], c[0])(a[1], b[1], c[1])等上迭代。我们可以使用*参数开箱,而不是使用['{}-{}-{}'.format(x, y, z) for x, y, z in zip(a, b, c)]

相关内容

  • 没有找到相关文章