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

时间:2015-04-28 04:31:41

标签: python string list elements subtraction

我有这个字符串列表:

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

有更好的方法吗?

4 个答案:

答案 0 :(得分:5)

以下是在itertools.groupby()中使用str.isdigit()list comprehension的解决方案:

>>> 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 :(得分:1)

x = ['+27', '05', '1995 F']
l = []
[l.extend(e.split()) for e in x]
print l

并为发烧友Flatten (an irregular) list of lists

结帐

答案 2 :(得分: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

答案 3 :(得分: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']