Когда я запускаю ваш код, я получаю исключение:
---------------------------------------------------------------------------
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]