如何考虑负数将字符串拆分为列表?

3 投票
2 回答
2283 浏览
提问于 2025-04-17 06:42

我想把一个字符串分割成这样:

strg = "22+11-aa+bb-44-" 

然后变成一个列表,像这样:

my_list = ['22', '+','11', '-', 'aa', '+', 'bb', '-44', '-']

所有不是数字的部分都要完全分开。如果'-'后面的部分是数字,那么它应该和'-'连在一起,变成一个负数。

2 个回答

6
import re

strg = "22+11-aa+bb-44+-zz99+-33-" 
print re.findall(r'-?\d+|[a-z]+|\W+?', strg)
['22', '+', '11', '-', 'aa', '+', 'bb', '-44', '+', '-', 'zz', '99', '+', '-33', '-']

结果:

1

这里有一个不使用正则表达式的解决方案,虽然代码会变得更长,但在处理大数据集时速度会更快:

strg="22+11-aa+bb-44-"
arr=[]
i=0
for j in range(len(strg)):
        if strg[j] in '+-':
            arr.append(strg[i:j])
            if strg[j]=='-' and strg[min(j+1,len(strg)-1)].isdigit():
                i=j
            else:
                arr.append(strg[j])
                i=j+1
print arr

结果:

['22', '+', '11', '-', 'aa', '+', 'bb', '-44', '-']

撰写回答