次のような浮動小数点数のタプルのリストがあります
[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]
同じ構造 (タプルのリスト、またはリストのリスト) を維持しながら、すべての数値を同じ形式 (小数点以下 8 桁の精度の科学的表記法) の文字列に変換するにはどうすればよいですか?
入れ子の for ループでできると思いますが、map
何とか使うなどもっと簡単な方法はありませんか?
次のような浮動小数点数のタプルのリストがあります
[ (1.00000001, 349183.1430, 2148.12222222222222), ( , , ), ..., ( , ,) ]
同じ構造 (タプルのリスト、またはリストのリスト) を維持しながら、すべての数値を同じ形式 (小数点以下 8 桁の精度の科学的表記法) の文字列に変換するにはどうすればよいですか?
入れ子の for ループでできると思いますが、map
何とか使うなどもっと簡単な方法はありませんか?
一方通行:
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 ])
便利な機能:
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)
使用する前にプリントを取り出します。どのように機能するかを確認できるように少し冗長にしてから、コードを自分で締めます。
本当にマップを使いたい場合は、次のようにすることができます。
map(lambda x: tuple(map(lambda y: '%08f' % y, x)), list)
しかし、IMO、リスト内包表記の方が読みやすいです。