将Mathematica代码转换为Python

时间:2018-07-30 10:27:08

标签: python python-3.x list wolfram-mathematica

我正在将一些代码从Mathematica转换为Python。假设我有以下列表:

l = [["x1", "x2", "x3"], ["x4", "x5", "x6"], ["x7", "x8"], ["x9", 
"x10"], ["x11"]]

我想将其转化为多项式,以使列表中每个元素的长度成为变量x的幂。在Mathematica中,我通过以下方式做到这一点:

Total[x^Map[Length, l]]

给出:

Output: x + 2 x^2 + 2 x^3

这意味着列表1中有1个元素,其长度为1,2个元素的长度为2,2个元素的长度为3。在Python中,我尝试了以下操作:

sum(x**map(len(l), l))

但是这没有用,因为没有定义x,我也尝试了“ x”,它也不起作用。我想知道如何翻译这样的代码。

3 个答案:

答案 0 :(得分:2)

您可以为此使用

2*x**3 + 2*x**2 + x

将给出:

x

在这里,我创建了一个符号零单例sympy.S.Zero,然后将map(len, l)的凸起加到我们可以从print(list(map(len, l))) 获得的那些幂上。

[3, 3, 2, 2, 1]

将给出:

$text = '--ACT-- active --INA-- inactive';
$textAfter= preg_replace('/--ACT-- +(\w+) +--INA-- +(\w+)/',
    '<div class="wp"><b>1</b>${1}</div> <div class="wp"><b>2</b>${2}</div>',
    $text);
echo $textAfter;
//prints: <div class="wp"><b>1</b>active</div> <div class="wp"><b>2</b>inactive</div>

答案 1 :(得分:1)

这是另一个使用sympy的解决方案:

from sympy import Matrix
from sympy.abc import x

l = [["x1", "x2", "x3"], ["x4", "x5", "x6"], ["x7", "x8"], ["x9", "x10"], ["x11"]]
powers = Matrix(list(map(len, l))) # Matrix([3, 3, 2, 2, 1])
raise_x_to_power = lambda y: x**y
output = sum(powers.applyfunc(raise_x_to_power))

print(output)
# 2*x**3 + 2*x**2 + x

答案 2 :(得分:0)

您可以根据自己的要求创建字符串,例如:

from itertools import groupby
l = [["x1", "x2", "x3"], ["x7", "x8"], ["x9", "x10"], ["x4", "x5", "x6"], ["x11"]]

g = groupby(sorted(l, key = len), key = len)

s = " + ".join([" ".join([str(len(list(i))), "* x **", str(j)]) for j, i in g])
print(s)
#output
#1 * x ** 1 + 2 * x ** 2 + 2 * x ** 3

但这只是一个字符串,而根据您的问题,我认为您想稍后评估此公式。