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

2024-10-03 09:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个清单如下。你知道吗

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

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

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

谢谢你。你知道吗


Tags: 标记列表dataservertime数字listtulip
3条回答

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

您可以尝试使用正则表达式(^{})。尤其是\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,因为该名称是由内置函数使用的。你知道吗

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

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

相关问题 更多 >