0

我对python很陌生。

我想要一个正好有 10000 个大整数(任意精度)的数组。

我试着这样做:

M = []

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

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

但我得到:

IndexError: list assignment index out of range

我应该使用什么数据结构,如何初始化它并为其保留空间?

4

5 回答 5

3

该列表未正确初始化。

试试M = [0]*10000。这将为您提供正确大小的列表。只需将 替换为0您想要的任何默认值(或之后用正确的值覆盖它)。

于 2012-08-03T15:38:54.610 回答
3

与 JavaScript 不同,如果数组元素不存在,则不能按索引分配它们。我建议你简单地追加到数组:

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

如果密钥很重要并且您需要任意创建它们,请使用dict

M = {}
for k in range(1,10001):
    M[k] = ...
于 2012-08-03T15:40:50.240 回答
0

预留空间:

M = [0] * 10000

那么你可以使用:

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

对于范围内的 k (2,10001):M[k] = ...

于 2012-08-03T15:40:15.607 回答
0

要使用大数组,您可以考虑使用Numpy作为包来进行数值计算以及大数组的高效存储和操作。你可以做这样的事情:

import numpy as np

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

为了留在纯 python 方面,我会这样做:

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

使用 IPython 的时间(推荐使用 python 的命令行解释器):

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
于 2012-08-03T15:56:43.247 回答
0

代码

米=[];

m.append(1);

m.append(2);

m.append(3);

对于范围内的 k(2,1000):

    m.append(k);

打印(米);

对于面向对象,这将有利于追加和删除 adv:操作简单,使用方便,灵活性高。

于 2012-08-03T18:09:53.977 回答