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

3

我有一个字符串列表:

x = ['+27', '05', '1995 F']

我需要一些代码,它可以输出以下内容:
['+', '27', '05', '1995', 'F']

我在考虑对最后一个元素使用.split()函数,所以我写了这段代码:
x=['+27', '05', '1995 F']
x[2]=x[2].split()

这将输出:

['+27', '05', ['1995', 'F']]

如何确保第二个元素不是子列表,而是输出它?
['+27', '05','1995','F']

我应该使用insertdel吗?

我对于第一个元素使用insertdel进行了编写:

x=x.split("/")
x.insert(0,x[0][0])
x.insert(1,x[1][1:])
del x[2]

这将输出:
['+', '27', '05', '1995 F']

有更好的方式吗?

6
我在你的帖子中修正了很多大写、缩进、拼写和格式方面的错误。请在未来的提问中多花点功夫,以保持高质量。 - orlp
4个回答

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

这个方法是通过将x中的每个字符串根据是否为数字分成字符组,然后将这些组合并成字符串,并从结果字符串中去除空格来实现的。
正如您所看到的,与迄今为止提出的其他解决方案不同,它将'+27'拆分为'+'和'27'(正如您的问题所要求的那样)。

1
糟糕,我错过了+27部分。这个问题很令人困惑。 - wim

1

1
这里有一个快速解决方案:
x=['+27', '05', '1995 F']
finlist=[]
for element in x:
    for val in element.split(" "):
        finlist.append(val)
print finlist

或者:
x=['+27', '05', '1995 F']
finlist=[]
for element in x:
    finlist.extend(element.split(" "))
print finlist

1

如何确保第二个元素不是一个子列表并输出它?

使用extend来做到这一点:

In [32]: result = []

In [34]: inp = ['+27', '05', '1995 F']

In [35]: [result.extend(i.split()) for i in inp]
Out[35]: [None, None, None]

In [36]: result
Out[36]: ['+27', '05', '1995', 'F']

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接