首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分包含python中数学运算符的字符串

拆分包含python中数学运算符的字符串
EN

Stack Overflow用户
提问于 2022-10-01 00:14:20
回答 4查看 76关注 0票数 1

世界!,我今天早些时候遇到了一个问题。除数字和变量外,我还试图拆分操作。它会将+-/*与数字或变量分开(例如: 10+11+10在代码中,而*中则有一个列表)

我的代码:

代码语言:javascript
复制
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)

我得到的输出:

代码语言:javascript
复制
['100+20+a', '100', '100']

我想要的输出:

代码语言:javascript
复制
["100","+","20","+","a"]
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-10-01 00:30:02

使用堆栈

代码语言:javascript
复制
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

示例

代码语言:javascript
复制
print(parse("100+20+a"))
# Output: ['100', '+', '20', '+', 'a']
票数 3
EN

Stack Overflow用户

发布于 2022-10-01 00:23:13

尝试:

代码语言:javascript
复制
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)

指纹:

代码语言:javascript
复制
['100', '+', '20', '+', 'a']
票数 1
EN

Stack Overflow用户

发布于 2022-10-01 00:23:35

如果您对第三方工具开放--有一个简单的方法:

它很容易转换到您想要的功能。

代码语言:javascript
复制
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)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73914994

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档