对Python集合符号感到困惑

时间:2013-12-02 07:31:36

标签: python

我不断收到“IndexError:列表分配索引超出范围”。我仍然试图掌握Python。为什么运行程序时会出现索引错误。有没有更好的方法来解决这个问题?这只是我代码中的一小部分。

T=a=h=FA=[]

i=1

T[i]=10*(.0001)
a[i]=-1
h[i]=(4)/2
FA[i]=function(-1)

我只想让这些集合等于i=1的值。

4 个答案:

答案 0 :(得分:4)

您的列表为空,因此没有要替换的元素1。而且,他们都被绑定到同一个列表。你不希望这样。

T=[]
a=[]
h=[]
FA=[]

T.append(10*(.0001))
a.append(-1)
h.append((4)/2)
FA.append(function(-1))

答案 1 :(得分:3)

使用方法追加或插入。例如:

T.append(1)

答案 2 :(得分:2)

您只能设置已存在的位置。

你可以

  • 使用预期的0个数字预分配您的列表,以便之后覆盖这些值

  • 只需将值附加到您的列表中。

顺便说一句:

  1. 这一个

    T=a=h=FA=[]
    

    生成一个列表,并通过多个变量访问它。如果您通过其中一个更改,则通过其他人也可以看到更改。做得更好

    T = []; a = []; h = []; FA = []
    

    T, a, h, FA = [], [], [], []
    

    为了创建四个不同的列表(不是集合)。

  2. 索引是基于0的,因此您必须先从i = 0开始,然后再前进到下一个值。

答案 3 :(得分:0)

首先,您需要了解python中“immutable”和“mutable”对象的概念。 当对象上的任何操作创建对象的新副本然后对新创建的对象执行操作时,不可变对象是对象。例如,

 a = "hello world"
 b = a
 a = "new world"
 print b
 "hello world"
 print a
 "new world"

Python不可变对象是str,int,float,tuple

另一方面,可变对象不会创建对象的新副本并对同一对象进行操作,采用与上面相同的示例,其中a和b作为列表

a = []
b = a
a.append('hi')
print a
['hi']
print b
['hi']

a和b都是对象的相同副本。 Python列表,集合是Mutable对象。

因此,在这种情况下,对于单独的列表,它应该是T = []; a = []; h = []; FA = []

并且python列表具有“按需”内存块分配,因此仅声明a = []不会为此列表创建任何内存块,因此当您为列表中的元素分配值时(例如。{{ 1}})它抛出异常。 a[1]是前往此处的方法,因为您不必担心列表内存分配问题