字符串列出与整数分组

例如,我需要 listBuilder('24+3-65*2') 返回 ['24', '+', '3', '-', '65', '*', '2']字符串列出与整数分组

我们不允许使用自定义的导入函数。我必须在没有他们的情况下做这项工作。这是我迄今为止...

def listBuilder(expr): 

operators = ['+', '-', '*', '/', '^']

result = []

temp = []

for i in range(len(expr)):

if expr[i] in operators:

result.append(expr[i])

elif isNumber(expr[i]): #isNumber() returns true if the string can convert to float

temp += expr[i]

if expr[i+1] in operators:

tempTwo = ''.join(temp)

result.append(tempTwo)

temp = []

tempTwo = []

elif expr[i+1] == None:

break

else:

continue

return result

在这一点上,我得到一个错误,串索引超出范围包括expr[i+1]行。帮助将不胜感激。我一直坚持了几个小时。

回答:

您正在遍历列表中的所有组件,包括最后一个项目,然后测试下一个项目是否为运算符。这意味着当你的循环到达最后一个项目时,没有更多项目要测试,因此索引错误。

请注意,运算符绝不会出现在表达式的末尾。也就是说,你不会得到像2+3-这样的东西,因为这没有意义。因此,您可以测试除最后一个之外的所有项目:

for idx, item in enumerate(expr): 

if item in operators or (idx == len(expr)-1):

result.append(item)

elif idx != len(expr)-1:

temp += item

if expr[idx+1] in operators:

tempTwo = ''.join(temp)

result.append(tempTwo)

temp = []

tempTwo = []

elif expr[idx+1] == None:

break

else:

continue

回答:

我不确定这是否是最佳解决方案,但适用于特定情况。

operators = ['+', '-', '*', '/', '^'] 

s = '24+3-65*2/25'

result = []

temp = ''

for c in s:

if c.isdigit():

temp += c

else:

result.append(temp)

result.append(c)

temp = ''

# append the last operand to the result list

result.append(temp)

print result

# Output: ['24', '+', '3', '-', '65', '*', '2', '/', '25']

回答:

我想出了一个更简洁的函数版本,避免使用字符串标记,这在Python中更快。

您的代码抛出了索引错误,因为在上一次迭代中,您正在检查位置i + 1处的某个东西,这是位于列表末尾的一处。该生产线

if expression[i+1] in operators: 

,因为在最后的迭代i是最终名单索引,而检查不存在的列表项引发错误。

def list_builder(expression): 

operators = ['+','-','*','/','^']

temp_string = ''

results = []

for item in expression:

if item in operators:

if temp_string:

results.append(temp_string)

temp_string = ''

results.append(item)

else:

if isNumber(item):

temp_string = ''.join([temp_string, item])

results.append(temp_string) #Put the last token in results

return results

以上是 字符串列出与整数分组 的全部内容, 来源链接: utcz.com/qa/259878.html

回到顶部