将列表中的每个字符串拆分为数字和非数字部分

Des*_*uds 3 python string list elements subtraction

我有这个字符串列表:

x = ['+27', '05', '1995 F']
Run Code Online (Sandbox Code Playgroud)

我想要一些代码输出:

['+', '27', '05', '1995', 'F']
Run Code Online (Sandbox Code Playgroud)

我正在考虑.split()在最后一个元素上使用该函数,所以我编写了这段代码:

x=['+27', '05', '1995 F']
x[2]=x[2].split()
Run Code Online (Sandbox Code Playgroud)

这输出:

['+27', '05', ['1995', 'F']]
Run Code Online (Sandbox Code Playgroud)

如何确保第二个元素不是子列表,而是输出这个?

['+27', '05','1995','F']
Run Code Online (Sandbox Code Playgroud)

我应该使用insertdel

我用第一个元素写了这个insertdel:

x=x.split("/")
x.insert(0,x[0][0])
x.insert(1,x[1][1:])
del x[2]
Run Code Online (Sandbox Code Playgroud)

这输出:

['+', '27', '05', '1995 F']
Run Code Online (Sandbox Code Playgroud)

有没有更好的办法?

Zer*_*eus 5

下面是使用的解决方案itertools.groupby(),并str.isdigit()列表理解:

>>> from itertools import groupby
>>> x=['+27', '05', '1995 F']
>>> [''.join(g).strip() for s in x for k, g in groupby(s, str.isdigit)]
['+', '27', '05', '1995', 'F']
Run Code Online (Sandbox Code Playgroud)

这是通过将每个字符串x分成字符组来实现的,这些字符串是基于它们是否为数字,然后将这些组连接回字符串,最后从结果字符串中删除空格.

正如您所看到的,与目前为止提供的其他解决方案不同,它将"+27"分为"+"和"27"(正如您的问题所说).