如何在python中'结婚'两个字符串?

时间:2010-08-23 18:17:17

标签: python string

在python中混合两个字符串的智能方法是什么?

我需要一些东西将一个字符串插入另一个具有指定(默认= 1)间隔的字符串:

>>> aa = 'abcdefghijkl'
>>> bb = mix(aa)
>>> bb
'a b c d e f g h i j k l '
>>> cc = mix(bb,'\n',8)
>>> print cc
a b c d 
e f g h 
i j k l 

是否有一种优雅的方式来编写'mix'代码,它将需要1个必需参数(要处理的字符串)和两个可选:从字符串内的第二个位置开始插入的分隔符(可能长于一个字符) ,默认是一个空格),以及最初传递的字符串的每个切片的长度,以插入分隔符(默认值为1 - 表示在传递的字符串中的每个原始符号之后将插入一个字符串,这是第二个参数)。

3 个答案:

答案 0 :(得分:6)

def mix(s, c=' ', n=1):
    return ''.join(s[i:i+n]+c for i in range(0,len(s),n))

答案 1 :(得分:2)

itertools开始,有'石斑鱼'食谱,如下所示:

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

那么你想要的功能,让我们称之为mix,感谢gnibbler,看起来像

def mix(s, c=' ', n=1):
    return c.join(''.join(seq) for seq in grouper(n, s, '')) + c

我比gnibbler的答案更喜欢它,因为它更容易理解(和写入),因为它是根据现有的grouper函数来使用的,这个函数用于这样的事情。

答案 2 :(得分:0)

def mix(seq,sep=' ',dist=1):
    return sep.join(seq[i*dist:i*dist+dist]
                    for i in range(len(seq)/dist+1))

def take_n(seq,n):
    for i in range(len(seq)/n+1):
        yield seq[i*n:i*n+n]

def mixit(mystring, sep=' ', dist=1):
    return sep.join(list(take_n(mystring,dist)))

aa = 'abcdefghijkl'
bb = mix(aa)
print bb
cc = mix(bb,'\n', dist=8)
print cc

print mixit(aa)
print mixit(mixit(aa),'\n',8)