我想将数字与字符和字母分开,并将它们添加到列表中。
n = "1+22-3*4/5"
eq=list(n)
c=0
for i in eq:
if "*" in eq:
while "*" in eq:
c=eq.index("*")
eq[c-1]=float(eq[c-1])*float(eq[c+1])
del eq[c]
del eq[c]
print(eq)
if "/" in eq:
while "/" in eq:
c=eq.index("/")
eq[c-1]=float(eq[c-1])/float(eq[c+1])
del eq[c]
del eq[c]
print(eq)
if "+" in eq:
while "+" in eq:
c=eq.index("+")
eq[c-1]=float(eq[c-1])+float(eq[c+1])
del eq[c]
del eq[c]
print(eq)
if "-" in eq:
while "-" in eq:
c=eq.index("-")
eq[c-1]=float(eq[c-1])-float(eq[c+1])
del eq[c]
del eq[c]
print(eq)
print(n,"=",eq)
它只能附加列表中的每个数字。 当前输出为['1','+','2','2','-','3','*','4','/','5']
答案 0 :(得分:4)
您可以将itertools.groupby
与str.isdigit
一起用作主要功能:
from itertools import groupby
[''.join(g) for _, g in groupby(n, key=str.isdigit)]
这将返回:
['1', '+', '22', '-', '3', '*', '4', '/', '5']
答案 1 :(得分:2)
您可以使用正则表达式:
ICommandHandler<Base>
import re
s = "1+22-3*4/5"
re.split('(\W)', s)
答案 2 :(得分:1)
这里使用stdlib
的一些很棒的解决方案,这是一个纯python尝试:
i = "11+11*11"
def parser(i):
out = []
gram = []
for x in i:
if x.isdigit():
gram.append(x)
else:
out.append("".join(gram))
out.append(x)
gram = []
if gram:
out.append("".join(gram))
return out
parser(i) # ['11', '+', '11', '*', '11']
答案 3 :(得分:0)
我建议您按顺序处理字符串的字符(对于str中的ch),然后(a)将它们添加到列表中;或(b)将它们累加成一个数字:
str = "1+22-3*4/5"
tokens = []
number = None
operators = "+-*/"
digits = "0123456789"
for ch in str:
if ch in operators:
if number is not None:
tokens.append(number)
tokens.append(ch)
continue
elif ch in digits:
if number is None:
number = ch
else:
number += ch
continue
else:
# what else could it be?
pass
# After loop, check for number at end
if number is not None:
tokens.append(number)