2016-05-04 51 views
0

我想绘制一个带有texttable的表格。我有这样一段代码安排表的内容: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

回答

0

,问题是,如果列的值指定类型,自动类型被分配给它。这意味着最可能的类型将被评估。由于1.00.0比浮点数更接近整数,它们被转换为int。对于剩下的,他们更接近浮动,并用默认精度相应转换3.

在我的情况的解决方案是只前行使用

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

tt.add_rows(printed_list) 

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