使用相同符号生成多个SymPy表达式
我想用同一组符号创建很多(超过400个)SymPy表达式。这些表达式看起来像这样:
z_1_8 = k1 + k2 + kuni + k4 + k7
z_2_9_0 = k2 + k8 + k1 + k6
z_3_1_10 = k3 + kbi + k2 + k7
这些名字,比如'z_1_8',是从一个列表生成的,列表里的每个成员都包含命名每个表达式的数字。同样,符号也是来自一个列表,这个列表里的每个成员都是一个包含符号的字符串列表,比如'k1'
、'k2'
等等,用于生成每个表达式。
list_to_generate_expression_names = [[1, 8], [2, 9, 0], [3, 1, 10],...]
list_to_generate_expressions = [['k1', 'k2','kuni','k4','k7'], ['k2', 'k8', 'k1', 'k6'], ['k3', 'kbi', 'k2', 'k7']]
那么,有什么方法可以做到这一点呢?
1 个回答
1
我假设你在 list_to_generate_expressions
里的每个字符串都是已经存在的对象的名字。如果是这样,并且你的列表对应得很好,你可以这样做:
names = ['z_' + '_'.join([str(n) for n in name_nums]) for name_nums in list_to_generate_expression_names]
exprs = ['+'.join(expr_items) for expr_items in list_to_generate_expressions]
for name, expr in zip(names,exprs):
exec('{0} = {1}'.format(name,expr))
需要注意的是,这里用到了 exec
,这个东西使用时要小心。不过因为你用的是自己的列表,所以这样用是完全安全的。