世界!,我今天早些时候遇到了一个问题。除数字和变量外,我还试图拆分操作。它会将+、-、/、*与数字或变量分开(例如: 10+11+10在代码中,而*中则有一个列表)
我的代码:
x = "100+20+a"
operators = ["*","/","+","-"]
def get_index_of(OP,txt):
return [v for v,i in enumerate(txt+"+") if i == OP]
l = []
for i in operators:
l.append(get_index_of(i,x))
spliting = sum(l,[])
out = []
for j in spliting:
out.append(x)
x = x[:j]
print(out)我得到的输出:
['100+20+a', '100', '100']我想要的输出:
["100","+","20","+","a"]发布于 2022-10-01 00:30:02
使用堆栈
def parse(expression, operators = ["*","/","+","-"]):
stack = [''] # start with empty string on stack
for c in expression:
if c in operators:
stack.append(c) # place operator as new element on stack
stack.append('')
elif c != " ": # not a space
stack[-1] += c # append to last element on stack
return stack示例
print(parse("100+20+a"))
# Output: ['100', '+', '20', '+', 'a']发布于 2022-10-01 00:23:13
尝试:
from itertools import groupby
x = "100+20+a"
operators = {"*", "/", "+", "-"} # <-- use set instead of a list
out = ["".join(g) for _, g in groupby(x, operators.__contains__)]
print(out)指纹:
['100', '+', '20', '+', 'a']发布于 2022-10-01 00:23:35
如果您对第三方工具开放--有一个简单的方法:
它很容易转换到您想要的功能。
from more_itertools import split_at
>>>lst = list(split_at(x, lambda x: x == '+', keep_separator=True))
>>>lst
[['1', '0', '0'], ['+'], ['2', '0'], ['+'], ['a']]
outs = [''.join(x) for x in lst]
>>>outs
['100', '+', '20', '+', 'a']
# or doing in one shot:
>>>final = [''.join(x) for x in split_at(x, lambda x: x == '+', keep_separator=True)]https://stackoverflow.com/questions/73914994
复制相似问题