字符串列出与整数分组
例如,我需要 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

