2016-09-22 6 views
1

タプルのエントリが混合型(int、float、tuple)のタプルのリストがあり、リストの各要素を1行に出力したい。複合型のネストされたタプルでフォーマットされたfloatを出力する

例のリスト:

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

Iは万分の場所に印刷するフォーマットされたフロートを有する単一のラインとして、各タプルを印刷したい:

[('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を使用していました1行にすべてを取得する

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

しかし、私は正しい方法がわかりませんでした浮遊物をピジョンソニックな方法でフォーマットする。 (リストをループしたり、各タプルをループしたり、if-float/if-int/if-tupleをチェックしたり、すべてのfloatを"%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)) 

ご例えば、結果は、あなたが望む結果を得るために.format()のオプションで遊ぶことができ

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

です。

+0

私が想像していたほど素晴らしいものではありません(再帰的な印刷書式設定機能があるはずですが)。ありがとう! – Sal

関連する問題