我有这个字符串列表:
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']
我应该使用insert
和del
吗?
我使用insert
和del
:
x=x.split("/")
x.insert(0,x[0][0])
x.insert(1,x[1][1:])
del x[2]
输出:
['+', '27', '05', '1995 F']
有更好的方法吗?
答案 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
结帐
答案 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']