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