【问题标题】:Editing results into table将结果编辑到表格中
【发布时间】:2023-04-10 10:11:01
【问题描述】:

在下面的代码中,我尝试在代码中进行编辑,以更美观的方式输出结果,如下所示。寻求一些帮助。

import numpy as np
import math
for p in range(10): 
    x=10.0**-p; 
    result = np.float64((1-np.cos(x))/x)
    print (p)
    print (result)
    Test = np.float64(2*np.sin(x/2)**2/x)
    print (p)
    print(Test)

给出以下结果:

0
0.459697694132
0
0.459697694132
1
0.0499583472197
1
0.0499583472197
2
0.00499995833347
2
0.00499995833347
3
0.000499999958326
3
0.000499999958333
4
4.99999996961e-05
4
4.99999999583e-05
5
5.0000004137e-06
5
4.99999999996e-06
6
5.00044450291e-07
6
5e-07
7
4.99600361081e-08
7
5e-08
8
0.0
8
5e-09
9
0.0
9
5e-10

但是,我试图以更美观的方式输出结果。如何编辑我的代码以输出如下结果:

p     Result             Test

0     0.459697694132     0.459697694132
1     0.0499583472197    0.0499583472197
2     0.00499995833347   0.00499995833347
3     0.000499999958326  0.000499999958333
4     4.99999996961e-05  4.99999999583e-05
5     5.0000004137e-06   4.99999999996e-06
6     5.00044450291e-07  5e-07
7     4.99600361081e-08  5e-08
8     0.0                5e-09
9     1e-09  0.0         5e-10

【问题讨论】:

    标签: python formatting tabular


    【解决方案1】:

    可以使用pandas DataFrame

    vals = []
    for p in range(10): 
        x=10.0**-p; 
        result = np.float64((1-np.cos(x))/x)
        test = np.float64(2*np.sin(x/2)**2/x)
        vals.append((p, result, test))
    

    然后

    import pandas as pd
    
    df = pd.DataFrame(vals, columns=['p', 'result', 'test'])
    
    
        p   result      test
    0   0   0.45969769  0.45969769
    1   1   0.04995835  0.04995835
    2   2   0.00499996  0.00499996
    3   3   0.00050000  0.00050000
    4   4   0.00005000  0.00005000
    5   5   0.00000500  0.00000500
    6   6   0.00000050  0.00000050
    7   7   0.00000005  0.00000005
    8   8   0.00000000  0.00000001
    9   9   0.00000000  0.00000000
    

    为方便起见,您也可以使用np.vectorize

    def func(p):
        x=10.0**-p;
        result = np.float64((1-np.cos(x))/x)
        test = np.float64(2*np.sin(x/2)**2/x)
        return p, result, test
    
    
    vals = np.vectorize(func)(np.arange(10))
    
    pd.DataFrame(dict(zip(['p', 'result', 'test'], vals)))
    

    【讨论】:

    • 你的结果似乎和我的不同
    • @jh123 抱歉,我使用了x 而不是p。将编辑:)
    【解决方案2】:

    您的代码如下所示:

    print("p    Result        Test")
    for p in range(10): 
        x=10.0**-p; 
        result = np.float64((1-np.cos(x))/x)
        Test = np.float64(2*np.sin(x/2)**2/x)
        print("{}    {}        {}".format(p, result, Test))
    

    您可以使用 f 字符串(如果您使用的是 Python 3.6):

    print("p    Result        Test")
    for p in range(10): 
        x=10.0**-p; 
        result = np.float64((1-np.cos(x))/x)
        Test = np.float64(2*np.sin(x/2)**2/x)
        print(f"{p}    {result}        {Test}")
    

    【讨论】:

    • 文件“”,第 6 行 print(f"{p} {result} {Test}")
    • 您使用的版本低于 Python3.6。在这种情况下使用第一个代码块。
    • 有没有办法在该代码中正确排列所有列?他们似乎不在
    • {}之间添加更多或更少的空格
    • 没有编程来代替手动进行吗?
    【解决方案3】:

    使用format,但问题是如果不添加新循环就很难知道结果的最大长度。所以我可以做的是:

    import numpy as np
    import math
    print("{:<3}".format("p"),"{:<23}".format("result"),"Test")
    for p in range(10): 
        x=10.0**-p; 
        result = np.float64((1-np.cos(x))/x)
        Test = np.float64(2*np.sin(x/2)**2/x)
        print("{:<3}".format(p),"{:<23}".format(result),Test) 
    

    输出:

    p   result                  Test
    0   0.45969769413186023     0.459697694132
    1   0.049958347219741794    0.0499583472197
    2   0.004999958333473664    0.00499995833347
    3   0.0004999999583255033   0.000499999958333
    4   4.999999969612645e-05   4.99999999583e-05
    5   5.000000413701855e-06   4.99999999996e-06
    6   5.000444502911705e-07   5e-07
    7   4.9960036108132044e-08  5e-08
    8   0.0                     5e-09
    9   0.0                     5e-10
    [Finished in 0.3s]
    

    【讨论】:

    • 但可以肯定,result最大长度为22,之后会变成0.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-25
    • 1970-01-01
    相关资源
    最近更新 更多