Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对Python集合表示法感到困惑_Python - Fatal编程技术网

对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) 您的列

我一直得到“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)

您的列表为空,因此没有要替换的元素1。而且,它们都绑定到同一个列表。你不会想要的

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

T.append(10*(.0001))
a.append(-1)
h.append((4)/2)
FA.append(function(-1))
您只能设置已存在的位置

你也可以

  • 使用预期的
    0
    s数预先分配列表,以便在以后覆盖这些值

  • 只需将这些值附加到列表中
顺便说一句:

  • 这个

    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']