4

次のような浮動小数点数のタプルのリストがあります

[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]

同じ構造 (タプルのリスト、またはリストのリスト) を維持しながら、すべての数値を同じ形式 (小数点以下 8 桁の精度の科学的表記法) の文字列に変換するにはどうすればよいですか?

入れ子の for ループでできると思いますが、map何とか使うなどもっと簡単な方法はありませんか?

4

5 に答える 5

4

一方通行:

a = [ (2.3, 2.3123), (231.21, 332.12) ]
p = list()
for b in a:
    k = list()
    for c in b:
        k.append("{0:.2f}".format(c))
    p.append(tuple(k))
print p     

内側のループを削除:

p = list()
for b in a:
    p.append(tuple("{0:.2f}".format(c) for c in b))

外側のループも削除します。

p = [ tuple("{0:.2f}".format(c) for c in b) for b in a ]

印刷するにはp:

"\n".join([ "\t".join(b) for b in p ])
于 2013-04-21T04:10:36.127 に答える
0

便利な機能:

def stringify(listAll, sFormat):
    listReturn = []
    for xItem in listAll:
        if type(xItem) == float:
            xNewItem = sFormat.format(xItem)
            print(type(xNewItem))
            listReturn.append(xNewItem)
        else:
            xNewItem = str(xItem)
            print(type(xNewItem))
            listReturn.append(xNewItem)
    return listReturn

listAll = ['a', 3.1, 'b', 2.6, 4, 5, 'c']
listNew = stringify(listAll, '{0:.3}')
print(listNew)

使用する前にプリントを取り出します。どのように機能するかを確認できるように少し冗長にしてから、コードを自分で締めます。

于 2014-06-15T13:41:47.740 に答える
0

本当にマップを使いたい場合は、次のようにすることができます。

map(lambda x: tuple(map(lambda y: '%08f' % y, x)), list)

しかし、IMO、リスト内包表記の方が読みやすいです。

于 2013-04-21T04:41:45.807 に答える