对Python集合表示法感到困惑
我一直得到“IndexError:list assignment index out of range(索引器:列表分配索引超出范围)”,我仍在尝试了解Python的诀窍。为什么在运行程序时会出现索引错误。有没有更好的办法?这只是我代码中的一大块对Python集合表示法感到困惑,python,Python,我一直得到“IndexError:list assignment index out of range(索引器:列表分配索引超出范围)”,我仍在尝试了解Python的诀窍。为什么在运行程序时会出现索引错误。有没有更好的办法?这只是我代码中的一大块 T=a=h=FA=[] i=1 T[i]=10*(.0001) a[i]=-1 h[i]=(4)/2 FA[i]=function(-1) 我只想让集合等于I=1处的值 使用方法append或insert。例如: T.append(1) 您的列
T=a=h=FA=[]
i=1
T[i]=10*(.0001)
a[i]=-1
h[i]=(4)/2
FA[i]=function(-1)
我只想让集合等于
I=1
处的值 使用方法append或insert。例如:
T.append(1)
您的列表为空,因此没有要替换的元素1。而且,它们都绑定到同一个列表。你不会想要的
T=[]
a=[]
h=[]
FA=[]
T.append(10*(.0001))
a.append(-1)
h.append((4)/2)
FA.append(function(-1))
您只能设置已存在的位置
你也可以
- 使用预期的
s数预先分配列表,以便在以后覆盖这些值0
- 只需将这些值附加到列表中
T=a=h=FA=[]
生成一个列表,并通过多个变量使其可访问。如果您通过其中一个进行更改,那么也可以通过其他更改看到更改。最好
T = []; a = []; h = []; FA = []
或
以创建四个不同的列表(非集合)0
,因此您需要从i=0
开始,然后前进到下一个值首先,您需要理解python中“不可变”和“可变”对象的概念。 当对象上的任何操作创建对象的新副本,然后对新创建的对象执行操作时,不可变对象就是对象。例如
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列表、集合是可变对象
所以在这种情况下,它应该是T=[];a=[];h=[];FA=[]
用于单独的列表
python列表具有“按需”内存块分配,因此仅声明a=[]
不会为此列表创建任何内存块,因此当您将值分配给列表中的元素(例如a[1]
)时,它会引发异常。
list.append
是一种方法,因为您不必担心列表内存分配问题列表索引从0开始,而不是从1开始。@BurhanKhalid它仍然会抛出一个错误。我认为您将列表视为另一个数据结构,例如PHP数组(出于许多原因,它是一个奇怪的容器)。如果希望列表是一组键-值对,无论键是否为整数,都可以使用字典而不是列表。另一方面,如果您使用的索引没有特别的意义,并且您只需要一个有序的集合,那么列表就是您的容器。但是append只是将数字添加到列表的末尾,对吗?没有其他地方可以将对象放在空列表上。
a = []
b = a
a.append('hi')
print a
['hi']
print b
['hi']