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

Python 3 - How to split every character in a string into a list while keeping decimal numbers intact?

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)

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

我用 string1 和 string2 得到了我想要的输出:

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

在其他语言中,我们可以尝试对 lookarounds 进行正则表达式拆分。但是 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']