我有一个列表如下。
list = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']
如何在列表中分隔标记和数字?我想要这样的东西:
list = ['perfect','data', '1', 'queryda','873', 'server','187', 'tulip','91', 'time']
谢谢。
答案 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)
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']