python - 如何获得没有括号的输出?
问题描述
我在 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)]
解决方案
以下以更自然的方式完成整个工作。m
当一个简单的最终列表推导解决了它的问题时,一直使用该参数是没有意义的。在它下面成为匿名变量_
。(您的field
和K
变量在 OP 中并没有真正固定。我会按照我认为有意义的方式进行。)
def quad_polynomial(K, n):
R = PolynomialRing(K, [f'x{p}' for p in [1..n]])
gens_R = matrix(R, 1, n, R.gens())
return ( gens_R * random_matrix(K, n, n) * gens_R.transpose() +
gens_R * random_matrix(K, n, 1) +
random_matrix(K, 1, 1) )[0, 0]
P = [quad_polynomial(QQ, 2) for _ in [1..3]]
上面这次交付:
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 随机矩阵。)
注意:在例程的返回值中quad_polynomial
,形状为( ... )[0, 0]
,请注意该部分( ... )
是一个 1x1 矩阵,要提取其唯一的条目,我们使用 that [0, 0]
。
推荐阅读
- apache2 - 如何配置应用程序以通过 apache2 中的代理服务器发送请求
- r - R中predictorEffect Plot中的partial.residuals和strip问题
- java - 如何在 Android 中将 Lottie 动画设置为启动画面?
- python - 根据每行的最大值/最小值删除 df 中的行
- c# - REST-Api 不工作 ControllerBase - 404 错误(C# .Net Core)
- excel - 单击另一个单元格时,通过宏插入的图像正在移动
- c - BBU 在 OMNeT++ 中拆分
- javascript - sonarlint JavaScript 警告:“删除不必要的布尔文字”
- python - 模拟外部模块中的函数之外的对象
- r - 正则表达式,单词例外