0

リストに含まれるフロートのリストを印刷しても問題はありませんが、このリストのリストのフロートを1つだけ印刷すると、すべての数字が印刷されません!

listafeaturevector = [

[0.26912666717306399, 0.012738398606387012, 0.011347858467581035, 0.1896938013442868, 2.444553429782046]
,
[0.36793086934925351, 0.034364344308391102, 0.019054536791551006, 0.0076875387476751395, 3.03091214703604]
,
[0.36793086934925351, 0.034364344308391102, 0.019054536791551006, 0.0076875387476751395, 3.03091214703604]
,
[0.30406240228443038, 0.047100329090555518, 0.0049653458889261448, 0.0004618404341300081, 5.987025009738751]

]

for i in range (0,len(listafeaturevector)):
    a = listafeaturevector[i]
    print(a[0])
    print(",")
    print(a)
    for j in range (0, len(a)  ):
        print(a[j])

これはすべての数字を出力します:

print(a) 

これは部分的な数字を出力します:

print(a[0]) 
4

4 に答える 4

4

これは、メソッドfloatsを呼び出すことによって文字列に変換されるためです。__str__これにより、桁が切り捨てられます。正確な表現が必要ない場合は__repr__、ビルトインを介してメソッドを呼び出しreprて、浮動小数点表現全体を取得する必要があります

ここでのもう 1 つの重要な要素は、float の精度が IEEE 64 ビットで表現可能な形式よりも高いことです。したがって、いくつかの切り捨てがあります

>>> print 0.26912666717306399
0.269126667173
>>> print repr(0.26912666717306399)
0.269126667173064
>>> print("%.16f" % 0.26912666717306399)
0.2691266671730640
>>> 
于 2013-02-26T16:18:57.927 に答える
2

小数点以下の桁数を指定できます。

print("%.15f" % a[j])
于 2013-02-26T16:19:36.277 に答える
1

その理由は、リストのメソッドを呼び出すとprint、リストの各項目のメソッドが呼び出されるためです。ドキュメントの引用list__str____repr__

object.__repr__(self) オブジェクトの「正式な」文字列表現を計算するために、repr() 組み込み関数および文字列変換 (逆引用符) によって呼び出されます。可能であれば、これは同じ値を持つオブジェクトを再作成するために使用できる有効な Python 式のように見えるはずです (適切な環境が与えられた場合)。

その__repr__ため、オブジェクトにできるだけ近づけるようにしてください。そう:

>>> repr(0.012738398606387012)
'0.012738398606387012'
>>> str(0.012738398606387012)
'0.0127383986064'

list彼が模範的な市民であることは、そのすべてのアイテムを意味のあるものにしようとしています. これが、数値が切り捨てられない理由です。

この単純なテスト クラスを使用して、同じ動作を観察できます。

class B():
    def __str__(self): return 'STR CALLED'
    def __repr__(self): return 'REPR CALLED'


>>> print(B())
STR CALLED
>>> print([B()])
[REPR CALLED]
于 2013-02-26T16:32:18.373 に答える
0

文字列フォーマットを使用してみてください:

print(".%15f" % a[0])
于 2013-02-26T16:21:57.047 に答える