要求我定义一个采用以下格式的列表的函数:
[2, "+", 5], 3, 5]
并返回带有评估表达式(例如此表达式)的列表
[7, 3, 5]
def evalExpr(lst):
"""
parameters : lst of type lst:
returns : evaluation of the expression inside brackets;
"""
for i in lst:
if len(lst[i]) == 3:
for j in lst[i]:
if lst[i][j]== "+":
lst[i] = lst[i][j-1] + lst[i][j+1]
return lst
print(evalExpr([[2, "+", 5], 3, 5]))
<ipython-input-1-5c5345233e02> in evalExpr(lst)
5 """
6 for i in lst:
----> 7 if len(lst[i]) == 3:
8 for j in lst[i]:
9 if lst[i][j]== "+":
TypeError: list indices must be integers or slices, not list
我应该怎么做才能获得正确的输出?
答案 0 :(得分:0)
当我运行您的代码时,这是我的例外情况:
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-2-1d51996f7143> in <module>
----> 1 evalExpr([[2, "+", 5], 3, 5])
<ipython-input-1-5c5345233e02> in evalExpr(lst)
5 """
6 for i in lst:
----> 7 if len(lst[i]) == 3:
8 for j in lst[i]:
9 if lst[i][j]== "+":
TypeError: list indices must be integers or slices, not list
突出显示的行显示i
不是整数(它可能是列表对象),并且您正在尝试将其用作索引。如果需要索引,则需要在for循环中使用Python enumerate
函数。然后,您将能够在每次迭代中同时使用索引和当前值。
以下是如何使用此有用的Python函数的示例:
def evalExpr(lst):
"""
parameters : lst of type lst:
returns : evaluation of the expression inside brackets;
"""
for i, e in enumerate(lst): # i is the index and e the actual element in the iteration
if isinstance(e, list) and len(e) == 3:
lst[i] = eval(str(lst[i][0]) + lst[i][1] + str(lst[i][2]))
return lst
new_list = evalExpr([[2, "+", 5], 3, 5, [2,'*', 4], [2,'**', 4]])
print(new_list)
如果执行此代码,您将在控制台上看到以下结果:
[7, 3, 5, 8, 16]