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

如何在Python列表中分隔字符串和数字?,python,Python,我有一个清单如下 list = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time'] 如何在列表中区分令牌和数字?我想要像这样的东西: list = ['perfect','data', '1', 'queryda','873', 'server','187', 'tulip','91', 'time'] 谢谢。您可以尝试使用正则表达式()。特别是,\d+\d+: >>> import re &

我有一个清单如下

list = ['perfect','data1', 'queryda873', 'server187', 'tuplip91', 'time']
如何在列表中区分令牌和数字?我想要像这样的东西:

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

谢谢。

您可以尝试使用正则表达式()。特别是,
\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']

顺便说一句,你不应该给变量命名,因为它是由一个内置函数命名的。

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

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']
使用


list
作为一个名字很好,但是@nmichaels我想说,像这样的小片段没什么大不了的,但是如果你愿意,我会改变它。哦,我同意。我只是有点学究气。这很好,但天哪,这很难读。@theteddyboy先做所有的附加,然后在最后打印。
myList=myList.append(s)
存在问题。您如何处理One2Tree?一,二,三?我试图使用“match=re.match(r)”(..([0-9]+..)但不知道。对不起,你能解释一下itertools.chain。from_iterable(break)?我试图运行,但出现了错误警报。你遇到了什么错误,你使用的是什么版本的python?@thetedyboy
chain。from_iterable
“展平”嵌套的iterable。(即,turns
[[1,2],[3,4]
into
iter([1,2,3,4])
)2.7.3中的代码没有任何警告或错误。不过,我不确定您看到了什么。
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']