Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得没有括号的输出?_Python_Python 3.x_Sage - Fatal编程技术网

Python 如何获得没有括号的输出?

Python 如何获得没有括号的输出?,python,python-3.x,sage,Python,Python 3.x,Sage,我用SageMath编写了以下代码来生成多项式方程的随机系统 def quad_polynomial(field, n, m): Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)]) x1 = Polynomial_Ring1.gens() gen_Polynomial_Ring1 = matrix(x1) list_of_quadratic_part = [0 for i

我用SageMath编写了以下代码来生成多项式方程的随机系统

def quad_polynomial(field, n, m):
    Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)])
    x1 = Polynomial_Ring1.gens()
    gen_Polynomial_Ring1 = matrix(x1)
    list_of_quadratic_part = [0 for i in range(m)]
    for i in range(m):
        list_of_quadratic_part[i] = gen_Polynomial_Ring1 * (random_matrix(K, n)) * gen_Polynomial_Ring1.transpose()
        # print(list_of_quadratic_part[i])
    return list_of_quadratic_part

def linear_and_constant_terms(field, n, m):
    a = []
    Polynomial_Ring1 = PolynomialRing(K, ['x%s'%p for p in range(1, n + 1)])
    varlist = (list(Polynomial_Ring1.gens()))
    v = matrix(varlist)
    LandC = [0 for i in range(m)]
    for i in range(m):
        im1 = matrix([K.random_element() for j in range(n)])
        expression = im1 * v.transpose()
        LandC[i] = expression
    return LandC

def final_expression_F(field, n, m):
    final_expression = [0 for i in range(m)]
    for i in range(m):
        final_expression[i] = quad_polynomial(field, n, m)[i] + linear_and_constant_terms(field, n, m)[i]
    return final_expression
当我运行代码时,我得到了方括号中的多项式,这是我不想要的

sage: P = final_expression_F(K, 2, 3)
sage: print(P)
[[(a)*x1^2 + x1*x2 + (a + 1)*x1],
 [(a)*x1^2 + (a)*x2^2 + x1 + (a + 1)*x2],
 [x1^2 + (a)*x1*x2 + (a)*x2^2 + (a)*x1 + x2]]
我希望我的输出是这样的

[(a)*x1^2 + x1*x2 + (a + 1)*x1,
 (a)*x1^2 + (a)*x2^2 + x1 + (a + 1)*x2,
 x1^2 + (a)*x1*x2 + (a)*x2^2 + (a)*x1 + x2]
有人能帮忙吗?我在这方面花了太多时间,但我无法解决这个问题

编辑:使用@U11 Forward的答案,我得到了圆括号

sage: P = final_expression_F(K, 2, 3)
sage: P = [j for i in P for j in i]
sage: print(P)
[((a + 1)*x1*x2 + x2^2 + (a + 1)*x1 + (a + 1)*x2),
 ((a + 1)*x1 + (a)*x2),
 ((a + 1)*x1^2 + (a)*x1*x2 + x2^2 + (a + 1)*x1 + (a)*x2)]

您正在打印列表列表。您需要将列表展平:

print([j for i in P for j in i])

您正在打印列表列表。您需要将列表展平:

print([j for i in P for j in i])

最终表达式\u F
函数的最后一行,尝试更改它:

    return final_expression
致:


最终表达式\u F
函数的最后一行,尝试更改它:

    return final_expression
致:


以下内容以更自然的方式完成整个工作。当简单的最终列表理解解决了问题时,始终使用参数
m
是没有意义的。下面是匿名变量
。(你的
字段
K
变量在OP中并不是固定不变的。我会按照我认为有意义的方式来做。)

这一次,上述内容提供了:

sage: P
[2*x1^2 - x1*x2 - 1/2*x1 + x2 - 1,
 -2*x1^2 - 2*x1*x2 + 2*x2^2 - 1/2*x1 + x2 - 1,
 x1*x2 + 2*x2^2 - 2*x1]
sage: 
该结果的条目是
n
变量中的二次随机多项式,也包括常数项。(来自1x1随机矩阵。)


注意:在例程
四次多项式的返回值中,它的形状是
(…)[0,0]
,注意部分
(…)
是一个1x1矩阵,为了提取它的一个也是唯一的条目,我们使用
[0,0]
,下面以更自然的方式完成整个工作。当简单的最终列表理解解决了问题时,始终使用参数
m
是没有意义的。下面是匿名变量
。(你的
字段
K
变量在OP中并不是固定不变的。我会按照我认为有意义的方式来做。)

这一次,上述内容提供了:

sage: P
[2*x1^2 - x1*x2 - 1/2*x1 + x2 - 1,
 -2*x1^2 - 2*x1*x2 + 2*x2^2 - 1/2*x1 + x2 - 1,
 x1*x2 + 2*x2^2 - 2*x1]
sage: 
该结果的条目是
n
变量中的二次随机多项式,也包括常数项。(来自1x1随机矩阵。)


注意:在例程
四次多项式
的返回值中,它的形状是
(…)[0,0]
,注意部分
(…)
是一个1x1矩阵,为了提取它的唯一条目,我们使用
[0,0]
三种方法重写函数,从@dan\u fulea的深刻答案开始

我们可以直接产生一个标量(而不是产生 1x1矩阵并提取其单个条目):

def my_random_polymone_a(K,n):
r”“”
返回一个随机次数多项式≤ 变量'x_1'中的2,…'x_n'超过'K'。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
x=向量(R,n,R.gens())
返回(x*随机矩阵(K,n,n)*x
+随机向量(K,n)*x
+K.随机元素()
我们可以避免矩阵和向量,直接选择多项式的
n(n+1)/2
系数作为随机场元素(前面的方法 拾取的
n^2+n+1
随机场元素):

def my_random_polymone_b(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
xx=(R.one(),)+R.gens()
r=K.随机单元
返回和((r()*x*y代表k,x在枚举中(xx)代表y在xx[k:],r.zero())
我们可以从(单项式,系数)对字典中生成多项式, 使用Sage的
IntegerVectors
枚举可接受的单项式:

def my_random_polymonent_c(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
r=K.随机单元
返回R({tuple(v):范围(3)中的d的R(),整数向量(d,n)})
示例:3次随机多项式的列表≤ 2在
x1
x2
上ℤ.

使用
my\u random\u polymonal\u a

sage:P=[my_random_polymonent_a(ZZ,2)表示范围(3)]
鼠尾草:P
[3*x1^2+6*x1*x2-x2^2+x1-x2,
-4*x1^2+3*x1*x2+x2^2-4*x2+1,
-28*x1^2+9*x1*x2+2*x1+x2-3]
使用
my\u random\u polymone\u b

sage:P=[my_random_polymonent_b(ZZ,2)表示范围(3)]
鼠尾草:P
[x1^2+x1*x2+11*x2^2-2*x1+x2+1,
2*x1^2-3*x1*x2-x2^2-x1-6*x2+1,
-16*x1*x2-x2^2-2*x2-1]
使用
my\u random\u polymone\u c

sage:P=[my_random_polymonent_c(ZZ,2)表示范围(3)]
鼠尾草:P
[-8*x1^2-x2^2-12*x1+7*x2-6,
2*x1^2+x1*x2-2*x2^2+2*x1+120*x2+1,
-2*x1*x2-x2^2-2*x1+1]

从@dan_fulea富有洞察力的回答开始,有三种重写函数的方法

我们可以直接产生一个标量(而不是产生 1x1矩阵并提取其单个条目):

def my_random_polymone_a(K,n):
r”“”
返回一个随机次数多项式≤ 变量'x_1'中的2,…'x_n'超过'K'。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
x=向量(R,n,R.gens())
返回(x*随机矩阵(K,n,n)*x
+随机向量(K,n)*x
+K.随机元素()
我们可以避免矩阵和向量,直接选择多项式的
n(n+1)/2
系数作为随机场元素(前面的方法 拾取的
n^2+n+1
随机场元素):

def my_random_polymone_b(K,n):
r”“”
返回一个随机次数多项式≤ 2在'x_1'中,…'x_n'在'K'上。
"""
R=多项式环(K,[1..n]]中p的[f'x{p}]
xx=(R.one(),)+R.gens()
r=K.随机单元
返回和((r()*x*y代表k,x在枚举中(xx)代表y在xx[k:],r.zero())