如何在Python列表中分隔字符串和数字?

时间:2013-12-03 19:04:22

标签: python

我有一个列表如下。

list = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']

如何在列表中分隔标记和数字?我想要这样的东西:

list = ['perfect','data', '1', 'queryda','873', 'server','187', 'tulip','91', 'time']

谢谢。

3 个答案:

答案 0 :(得分:10)

您可以尝试使用正则表达式(re)。特别是\d+|\D+

>>> import re
>>> 
>>> L = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']
>>> 
>>> [s for v in (re.findall(r'\d+|\D+', s) for s in L) for s in v]
['perfect', 'data', '1', 'queryda', '873', 'server', '187', 'tuplip', '91', 'time']

顺便说一句,你不应该为变量命名list,因为该名称是由内置函数获取的。

答案 1 :(得分:0)

我意识到这已经有了一个公认的答案,但我不得不添加这个替代方案,因为我认为它更容易阅读和理解。

import re
import itertools

lst = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']
broken = map(lambda s: re.findall(r'\d+|\D+', s), lst)
merged = list(itertools.chain.from_iterable(broken))
# merged is now ['perfect', 'data', '1', 'queryda', '873', 'server', '187', 'tuplip', '91', 'time']

答案 2 :(得分:0)

使用itertools.groupby

l = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']
from itertools import groupby
[''.join(g) for x in l for k,g in groupby(x, key=lambda y: y.isdigit())]
['perfect', 'data', '1', 'queryda', '873', 'server', '187', 'tuplip', '91', 'time']