在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 - 表示在传递的字符串中的每个原始符号之后将插入一个字符串,这是第二个参数)。
答案 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)