texttable draw改变了内容的格式

时间:2016-05-04 20:57:22

标签: python

我正在尝试使用texttable绘制一个表。我有这段代码来安排表的内容:

def get_int_avg_pre(r_list, p_list):
li = []
recall_list = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]
for recall in recall_list:
    r_ind = 0
    for i in r_list:
        if float(i)/100 >= recall:
            r_ind = r_list.index(i)
            break
    pre = max(p_list[r_ind:])
    li.append([str(recall), "{:.2f}".format(float(pre)/100)])
return li


def print_logs(qs, rs):
    t = Texttable()
    inter_val = get_int_avg_pre(r_list, p_list)

    printed_list = [['Recall', 'Interpolated Precision']]

    for el in inter_val:
        printed_list.append(el)

    t.add_rows(printed_list)

    print t.draw()

我跳过了你看到的一些部分,因为它们与我的问题无关。使用此脚本,表格内容不是我想要的格式。输出在下面,我可以看到printed_list中的确切值。有人可以帮我弄清楚我做错了吗?

printed_list:

[['Recall', 'Interpolated Precision'], ['0.0', '1.00'], ['0.1', '1.00'], ['0.2', '1.00'], ['0.3', '0.50'], ['0.4', '0.50'], ['0.5', '0.50'], ['0.6', '0.38'], ['0.7', '0.38'], ['0.8', '0.36'], ['0.9', '0.36'], ['1.0', '0.36']]

表:

Table

1 个答案:

答案 0 :(得分:0)

问题是如果没有为列值指定类型,则为其分配 auto 类型。这意味着将评估最可能的类型。由于 1.0 0.0 比float更接近整数,因此它们被转换为int。对于其余部分,它们更接近浮动并相应地使用默认精度3进行转换。

我的案例中的解决方案是使用

t.set_cols_dtype(["t", "t"])

在行

之前
tt.add_rows(printed_list)

给出特定的字段类型。我使用文本,因为在我的情况下我已经格式化了我的输入,但是texttable支持 float ,并且具有可配置的精度作为字段类型,因此使用它也是可能的。