在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)]
。