Python 3-如何将字符串中的每个字符分割成一个列表,同时保持十进制数字不变


string1 = '1+2*3/4'
string2 = '1 +2* 3 /  4'
string3 = '1.2*2+3/4'
string1List = list(string1)
string2List = list(string2)
string3List = list(string3)

我需要将给定的任何字符串拆分成一个列表,并且我需要按字符将其分解,因为在输入的字符串中会有随机空格,就像我的代码示例中的字符串2一样。

我用字符串1和字符串2得到我想要的输出:

string1List = ['1', '+' , '2' , '*' , '3' , '/' , '4' ]
string2List = ['1', ' ' ,' +' , '2' , '*' , ' ' , '3' , ' ' , '/' , ' ' , '4']

但是string3没有按我需要的方式工作:

# Actual result
string3List = ['1', '.' , '2' , '*' , '2' , '+' , '3' , '/' , '4']
# What I need as a result
string3List = ['1.2', '*' , '2' , '+' , '3' , '/' , '4']

有没有什么方法不利用导入来继续按字符分割字符串,同时保留浮点值?

使用带替换的re.findall

string3 = '1.2*2+3/4'
parts = re.findall(r'd+(?:.d+)?|[+*/-]', string3)
print(parts)

此打印:

['1.2', '*', '2', '+', '3', '/', '4']

在其他语言中,我们可以尝试在查找表上进行正则表达式拆分。但是Python的re.split不支持在零宽度环视上进行拆分,所以re.findall是一种解决方法。

一次通过算术运算自定义拆分:(

string = '1.2*2+3/4'
s = 0
res = []
for i in range(len(string)) :
if string[i] in '+*-/': 
res.extend([string[s:i], string[i]])
s = i+1
res.append(string[s:])
print(res) # ['1.2', '*', '2', '+', '3', '/', '4']

最新更新