2012-08-03 57 views
0

我對python很陌生。python bignum數組?

我想有一個正好有10000個大整數的數組(任意精度)。

我試圖做這樣的:

M = [] 

M[0] = 1 
M[1] = 1 

for k in range(2,10001): 
     M[k] = ... 

,但我得到:

IndexError: list assignment index out of range 

我應該使用什麼數據結構以及如何對其進行初始化,並預留空間呢?

+0

下面的答案是正確的,但應該指出的是,這樣做並不常見。只需在需要的時候列出清單,或者當您有可用的數據時,就可以將其放入。 – Julian 2012-08-03 15:42:26

回答

3

該列表未正確初始化。

嘗試M = [0]*10000。這會給你一個正確大小的列表。只需用0替換你想要的任何默認值(或之後用正確的值覆蓋它)。

+1

在這裏仔細地扔''數組''。我會說「這會給你一個正確大小的*列表*」。我也會解釋一下,在python中,「數組」有些不同,正確的術語是「list」。 (這可以幫助您瞭解何時使用Google)。 – mgilson 2012-08-03 15:55:34

0

預留空間:

M = [0] * 10000 

則可以使用:

M [0] = 1 M [1] = 1

對於k在範圍(2,10001 ): M [k] = ...

3

與JavaScript不同,如果數組元素不存在,則不能通過索引分配數組元素。我建議你就追加到數組:

M = [] 
for k in range(1,10001): 
    M.append(k) 

如果密鑰是很重要的,你需要arbitrarially創建它們,使用dict

M = {} 
for k in range(1,10001): 
    M[k] = ... 
+0

你的第一個例子最好寫成:M = [k for k in range(1,10001)]'(或者更簡單的說:'M = range(1,10001)'in python 2.x)。我只使用列表理解,因爲無論何時使用for循環和追加創建列表,都應該問問自己,列表理解是否合適。 – mgilson 2012-08-03 15:51:54

+0

@mgilson:我明白。請隨意使用這些更深入的方法追加到我的答案中。我保持它非常簡單,因爲OP不是很深入python。 – gahooa 2012-08-03 16:45:56

0

要大陣列工作,你可以考慮使用Numpy作爲數字計算和高效存儲和操作大型數組的軟件包。你可以做這樣的事情:

import numpy as np 

M = np.arange(10000) 
M[:2] = 1 

停留在純Python的一面,我會做:用IPython的

M = list(xrange(10000)) 
M[0] = 1 
M[1] = 1 

計時(建議報告命令行解釋與蟒蛇玩):

In [1]: %timeit M = list(range(10000)) 
10000 loops, best of 3: 195 us per loop 

In [2]: %timeit M = list(xrange(10000)) 
10000 loops, best of 3: 190 us per loop 

In [3]: %timeit M = np.arange(10000) 
100000 loops, best of 3: 9.74 us per loop 
0

代碼

m = [];

m.append(1);

m.append(2);

m。追加(3);

對於k在範圍(2,1000):

m.append(k); 

打印(米);

面向對象這一個將很好的追加和刪除 adv:操作簡單,使用方便,靈活性高。