可以說我有一個簡單的列表,lis = [5, *, 2]
Python的lambda表達式,使用字符串列表中的操作性
是否有可能沿着線做一些事情:我想用
print(reduce(lambda x,y,z: float(x) y float(z), lis))
10
在列表中給出的字符串來確定操作數。
可以說我有一個簡單的列表,lis = [5, *, 2]
Python的lambda表達式,使用字符串列表中的操作性
是否有可能沿着線做一些事情:我想用
print(reduce(lambda x,y,z: float(x) y float(z), lis))
10
在列表中給出的字符串來確定操作數。
運算符不能在Python中傳遞 - reduce(+, [1,2,3])
會給你一個SyntaxError
。同樣,您的運營商也在列表中。
如果您希望使用字符串查找運算符,則可以使用operator
模塊構造字典。
SYMBOL_TO_OPERATOR = {"*": operator.mul,
"+": operator.add, ...}
這些只是普通的方法雖然 - 你不能用「綴」的符號,你可以在符號中使用它們。
此外,這並沒有太大的意義,作爲reduce
操作(也不會是非常習慣的python)。你可以很容易地做一些事情,如:
statements = [[1, "*", 5], [2, "+", 9]]
results = [SYMBOL_TO_OPERATOR[symbol](a, b) for a, symbol, b in statements]
首先,你不能放置*
運營商的列表,因爲它不是在Python的值。相反,你可以使用mul
函數從operator
包:
from operator import mul
然後,假設你有以下列表:
lst = [5, mul, 2]
,你可以做到以下幾點:
a, op, b = lst
print(op(a,b))
這應打印:
10
。
讓我知道如果我是誤會,但我相信像下面將完成你的要求:
import operator
operators = {
'*': operator.mul,
'/': operator.div
}
dynamic_operator = lambda x,y,z: operators[y](x, z)
some_list = [5, '*', 5]
print dynamic_operator(*some_list)
您將需要擴大對operators
字典來涵蓋所有要處理的操作動態。有關更多操作員功能,請參閱:https://docs.python.org/2/library/operator.html
您打算如何將列表中的'* *視爲有效語法? – Brian
Aside:Pythonistas喜歡使用標識符'lst'來引用一個列表,而不是'list',因爲'list'會影響python內建。 – dg123