2016-09-22 59 views
1

我有一個元組列表,其中元組中的條目是混合類型(int,float,tuple)並且希望在一行上打印列表的每個元素。在混合類型的嵌套元組中打印格式化的浮點數

實施例列表:

[('520', 
    (0.26699505214910974, 9.530913611077067e-22, 1431, 
    (0.21819421133984918, 0.31446394340528838), 11981481)), 
('1219', 
    (0.2775519783082116, 2.0226340976042765e-25, 1431, 
    (0.22902629625165472, 0.32470159534237308), 14905481))] 

我想打印的每個元組與格式打印到萬分之一代替浮一行:

[('520', (0.2669, 9.5309e-22, 1431, (0.2181, 0.3144), 11981481)), 
('1219', (0.2775, 2.0226e-25, 1431, (0.2290, 0.3247), 14905481))] 

我用pprint到讓一切都在一條線上

pprint(myList, depth=3, compact=True) 
> ('1219', (0.2775519783082116, 2.0226340976042765e-25, 1431, (...), 14905481))] 

但我不確定如何正確以pythonic的方式格式化浮游物。 (除了循環遍歷列表,循環遍歷每個元組,檢查if-float/if-int/if-tuple並通過"%6.4f" % x轉換所有浮點數,必須有更好的方法。

回答

1

這不完全是你需要的,但非常接近,代碼非常緊湊。

def truncateFloat(data): 
    return tuple(["{0:.4}".format(x) if isinstance(x,float) else (x if not isinstance(x,tuple) else truncateFloat(x)) for x in data]) 
pprint(truncateFloat(the_list)) 

對於示例結果是

(('520', ('0.267', '9.531e-22', 1431, ('0.2182', '0.3145'), 11981481)), 
('1219', ('0.2776', '2.023e-25', 1431, ('0.229', '0.3247'), 14905481))) 

您可以用.format()選項發揮得到你想要的。

+0

不像我想象的那麼好(我覺得應該有一些遞歸打印格式化功能可用),但完成作業。謝謝! – Sal