4

タプルのエントリが混合型 (int、float、tuple) であるタプルのリストがあり、リストの各要素を 1 行に出力したいと考えています。

リストの例:

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

各タプルを 10000 位まで出力するように書式設定された float を使用して 1 行として出力したいと思います。

 [('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))]

しかし、フロートをpythonicな方法で適切にフォーマットする方法がわかりませんでした。(リストをループし、各タプルをループし、if-float/if-int/if-tuple をチェックし、すべての float を 経由で変換するよりも、より良い方法が必要です"%6.4f" % x)。

4

1 に答える 1

3

これはまさに必要なものではありませんが、非常に近く、コードはかなりコンパクトです。

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()して、必要なものを取得できます。

于 2016-09-23T08:29:49.120 に答える