2012-07-10 71 views
0

我有一個巨大的名單,數以十萬計的數字。這個列表在被sagemath生成的時候格式不正確,但是我必須用下面所示的格式來將它「提供」給另一個函數。這裏是很好格式化列表的示例:對齊列表元素Sagemath

  C=[ 
      ( 7.850629, 25.421135, 22.162571), 
      (37.706629, 28.421472, 0.229876), 
      (37.560629, 21.421809, 18.320977), 
      (39.238629, 26.422147, 18.442572), 
      (35.087169, 0.419785, 15.055789), 
      ] 

正如你可以看到,所有的元素都靠右對齊,以及基於精度和小數位。所以我的問題是這樣的:我怎樣才能格式錯誤列表(例如如下所示)轉換爲格式正確上述

B=[(37.074945, 22.414327, 
9.756234), (37.074945, 22.414665, 
1.669214), (37.074945, 22.415002, 
8.571376), (37.074945, 22.41534, 
1.294731), (37.074945, 22.415677, 
5.753062), (37.074945, 22.416014, 
7.519850)] 

(如果我能形容它更均勻一點,我會說,如果我的列表被認爲是一個矩陣,那麼它將有千分之十行和三列)

回答

0

Sage沒有很好的內置對齊函數。如果你願意考慮您的列表作爲基質的,你可以做

sage: matrix(B) 
[37.0749450000000 22.4143270000000 9.75623400000000] 
[37.0749450000000 22.4146650000000 1.66921400000000] 
[37.0749450000000 22.4150020000000 8.57137600000000] 
[37.0749450000000 22.4153400000000 1.29473100000000] 
[37.0749450000000 22.4156770000000 5.75306200000000] 
[37.0749450000000 22.4160140000000 7.51985000000000] 

它缺少逗號和其他語法部分,但是它的正確對齊。如果你願意使用html輸出,你可以做html.table(B)。在未來(見this possible future enhancement)應該有一個很好的「桌子」功能,好像這樣的顯示器一般。

+0

問題是,示例數據不好,以及爲例。根據小數位C = [(37.074945,22.414327, 9.756234),(37.074945,22.414665, 1.669214),(37.074945,22.415002, 8.571376),(37.074945,22.41534, 18.294731)矩陣不會對準元件, (37.074945,22.415677, 5.753062),(37.074945,22.416014, 17.519850)] 你可以通過試用這個來看到這個。不過,由於你的幫助,我完成了目前的任務。非常感謝 – CosmoSurreal 2012-07-10 13:59:33

0

嗯,我認爲這是一個普通的Python問題。鑑於您的評論中的C,以下工作。 "%9.5f"是關鍵洞察:

for l in C: 
    print "(%s)," % ', '.join("%9.5f"%i for i in l) 
    ....:  
(37.07494, 22.41433, 9.75623), 
(37.07494, 22.41466, 1.66921), 
(37.07494, 22.41500, 8.57138), 
(37.07494, 22.41534, 18.29473), 
(37.07494, 22.41568, 5.75306), 
(37.07494, 22.41601, 17.51985),