我有'01301347'
这样的字符串,我希望将其拆分为'01-13-30-01-13-34-47'
。
是否可以使用split()
执行此类操作?
答案 0 :(得分:3)
你想拼接和加入,而不是拆分:
'-'.join(mystr[i:i+2] for i in xrange(0, len(mystr)-1))
您还可以使用itertools.islice
和itertools.izip
:
'-'.join((a+b for a,b in itertools.izip(mystr, itertools.islice(mystr, 1, len(mystr)))))
答案 1 :(得分:1)
>>> s = '01301347'
>>> '-'.join(s[i:i+2] for i in range(0, len(s) - 1))
'01-13-30-01-13-34-47'
或者您可以使用:
>>> '-'.join(a+b for a,b in zip(s, s[1:]))
'01-13-30-01-13-34-47'
答案 2 :(得分:0)
>>> from operator import add
>>> from itertools import starmap
>>> '-'.join(starmap(add,zip(*[iter(s)]*2)))
'01-30-13-47'
>>> zip(*[iter(s)]*2)
[('0', '1'), ('3', '0'), ('1', '3'), ('4', '7')]
add
相当于+
:a + b = add(a,b)
starmap
将函数应用于来自iterable的每个值的解包参数列表。
>>> list(starmap(add,zip(*[iter(s)]*2)))
['01', '30', '13', '47']
最后我们只是join
他们:
>>> '-'.join(starmap(add,zip(*[iter(s)]*2)))
'01-30-13-47'
顺便说一句,我们可以避免使用starmap
和add
,以不同的方式编写它:
>>> '-'.join(map(''.join,zip(*[iter(s)]*2)))
'01-30-13-47'