這個應該是很容易。Python中的十進制對齊格式化
這裏是我的陣列(更確切地說,產生代表測試陣列的方法):
>>> ri = numpy.random.randint
>>> ri2 = lambda x: ''.join(ri(0,9,x).astype('S'))
>>> a = array([float(ri2(x)+ '.' + ri2(y)) for x,y in ri(1,10,(10,2))])
>>> a
array([ 7.99914000e+01, 2.08000000e+01, 3.94000000e+02,
4.66100000e+03, 5.00000000e+00, 1.72575100e+03,
3.91500000e+02, 1.90610000e+04, 1.16247000e+04,
3.53920000e+02])
我想一個字符串列表,其中「\ n'.join(list_o_strings)將打印:
79.9914
20.8
394.0
4661.0
5.0
1725.751
391.5
19061.0
11624.7
353.92
我想墊左邊的和的權利(但沒有超過必要的)。
我想要一個十進制後的零,如果這是十進制後的所有。
我不想科學記數法。
..我不想失去任何有效數字。 (在353.98000000000002 2不顯著)
是啊,這是很好的希望..
的Python 2.5的%g, %fx.x
等要麼令人迷惑我,或者不能做到這一點。 我還沒有試過import decimal
呢。我看不到NumPy做,要麼(雖然,在和array.__repr__
是小數對齊(但有時返回科學)。
哦,速度計數。我在這裏處理的大陣列。
我的當前的解決方案的方法是:( '')
- 到STR(a)和所述陣列和分割在解析關閉NumPy的的括號
- 爲str(e)中的每個元素然後墊和重建
- 到a.astype('S'+ str(i))其中i是最大值(len(str(a))),那麼pad
看起來應該有一些現成的解決方案有...(但不要求)
頂部的建議失敗時dtype
是float64:
>>> a
array([ 5.50056103e+02, 6.77383566e+03, 6.01001513e+05,
3.55425142e+08, 7.07254875e+05, 8.83174744e+02,
8.22320510e+01, 4.25076609e+08, 6.28662635e+07,
1.56503068e+02])
>>> ut0 = re.compile(r'(\d)0+$')
>>> thelist = [ut0.sub(r'\1', "%12f" % x) for x in a]
>>> print '\n'.join(thelist)
550.056103
6773.835663
601001.513
355425141.8471
707254.875038
883.174744
82.232051
425076608.7676
62866263.55
156.503068
請發佈不起作用的代碼。 – 2009-06-22 10:50:31