sagemath:将列表中的Dictionaries中的Fractions转换为matplotlib的Decimals

时间:2012-08-29 06:46:47

标签: list dictionary python-2.7 sage

eng3 = [solve(eng==(k-1)*md*Vm^2/(2*Patm*Vc*(Pc-Pc^(1/k))),Vc,solution_dict=1) for Pc in  xrange(2,10)]

我正在尝试自动化圣人数学中一些效率图的过程,我已经得到了这个公式。 Matplotlib.pyplot想要一个值列表。我要么在下面描述的列表中获得字典,要么以下列形式获得列表:

List:
[[Vc == (5231100000/35166511904977)], [Vc == (111907000000/1692075843832947)], [Vc == (364112000000/8911538005781703)], [Vc == (753818000000/25992803547821049)], [Vc == (138358000000/6222694018119437)], [Vc == (659020000/36808310575981)], [Vc == (25902500000/1736640592770261)], [Vc == (59144000000/4642920082445667)]]

Dictionary:    
[[{Vc: 1743700000/105499535714931}], [{Vc: 319775000/43516062236099}], [{Vc:  34670000000/7636845816518169}], [{Vc: 41083500000/12749600170083701}], [{Vc: 1703720000/689628024927753}], [{Vc: 25247000000/12691109152994019}], [{Vc: 44767000000/27012747987604137}], [{Vc: 5993300000/4234372317920577}]]

我想获取这些分数,将它们转换为数值近似值,并在sage math [python]中创建一个包含这些值的列表。 n()函数会将分数转换为小数,但我不确定如何隔离这些值以将其提供给n()

1 个答案:

答案 0 :(得分:1)

该列表来自solve,但问题实际上是一个纯粹的Python问题。要获得其中的每一项,如果列表名为Vlist,则可以执行

[v[0].rhs().n() for v in Vlist]

并且对于字典来说有点麻烦

[v[0].values()[0].n() for v in Vlist]

这种结构被称为“列表理解”。这些假设你真的有单一的解决方案!如果格式不同(例如,如果你得到类似Vc == 2*Vc^2的内容),那么你必须更加聪明。

背景 - 显然this ask.sagemath.org question是相关的。