我正在尝试使用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']]
表:
答案 0 :(得分:0)
问题是如果没有为列值指定类型,则为其分配 auto 类型。这意味着将评估最可能的类型。由于 1.0 或 0.0 比float更接近整数,因此它们被转换为int。对于其余部分,它们更接近浮动并相应地使用默认精度3进行转换。
我的案例中的解决方案是使用
t.set_cols_dtype(["t", "t"])
在行
之前tt.add_rows(printed_list)
给出特定的字段类型。我使用文本,因为在我的情况下我已经格式化了我的输入,但是texttable支持 float ,并且具有可配置的精度作为字段类型,因此使用它也是可能的。