0

我有一个字符串,例如'01301347',我想将其拆分为'01-13-30-01-13-34-47'.

是否可以使用 做这样的事情split()

4

3 回答 3

3

您想要拼接和加入,而不是拆分:

'-'.join(mystr[i:i+2] for i in xrange(0, len(mystr)-1))

您还可以使用itertools.isliceand itertools.izip

'-'.join((a+b for a,b in itertools.izip(mystr, itertools.islice(mystr, 1, len(mystr)))))
于 2013-07-15T20:22:07.617 回答
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'
于 2013-07-15T20:23:47.187 回答
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将函数应用于来自可迭代的每个值的解压缩参数列表。

>>> list(starmap(add,zip(*[iter(s)]*2)))
['01', '30', '13', '47']

最后我们只是join他们:

>>> '-'.join(starmap(add,zip(*[iter(s)]*2)))
'01-30-13-47'

顺便说一句,我们可以避免使用starmapadd以不同的方式编写它:

>>> '-'.join(map(''.join,zip(*[iter(s)]*2)))
'01-30-13-47'
于 2013-07-15T20:43:39.367 回答