繁体   English   中英

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM