Python 将列表传递给类时出现索引错误

Python 将列表传递给类时出现索引错误,python,list,class,Python,List,Class,我有以下代码: class TestClass: def __init__(self, myint, mylist=None): if mylist == None: mylist = [] self.myint = myint self.mylist = mylist[:] theList = [[1,3,4,5,6],[1,2,3],[1],[1,2,3,4,5,6,7,8,9]] myOb = [] f

我有以下代码:

class TestClass:

    def __init__(self, myint, mylist=None):

        if mylist == None:
            mylist = []
        self.myint = myint
        self.mylist = mylist[:]

theList = [[1,3,4,5,6],[1,2,3],[1],[1,2,3,4,5,6,7,8,9]]

myOb = []
for i in range(len(theList)):
    myOb[i] = TestClass(sum(theList[i]),theList[i])
    print(myOb[i].myint)
    print(myOb[i].mylist)
但是,\uuuuu init\uuuu在索引器上失败:列表分配索引超出范围。这我不明白

有什么建议吗?

您可以添加:

myOb[0] = 1
在您将其定义为理解之后-
myOb[i]=
在第一次迭代中尝试分配给第一个单元格(
i=0
),但该单元格尚不存在(有0个单元格)。你想要的是:

myOb.append(TestClass(sum(theList[i]),theList[i]))
如果您正在构建myOb,并且不需要打印,您可以使用:

myOb = map(lambda x: TestClass(sum(x),x), theList)
或者是一份清单。更好的是,自己在
\uuuuu init\uuuu
中求和:

def __init__(self, mylist):
    ...
    self.myint = sum(mylist)
地图将变成:

myOb = map(TestClass, theList)
您可以添加:

myOb[0] = 1
在您将其定义为理解之后-
myOb[i]=
在第一次迭代中尝试分配给第一个单元格(
i=0
),但该单元格尚不存在(有0个单元格)。你想要的是:

myOb.append(TestClass(sum(theList[i]),theList[i]))
如果您正在构建myOb,并且不需要打印,您可以使用:

myOb = map(lambda x: TestClass(sum(x),x), theList)
或者是一份清单。更好的是,自己在
\uuuuu init\uuuu
中求和:

def __init__(self, mylist):
    ...
    self.myint = sum(mylist)
地图将变成:

myOb = map(TestClass, theList)

因此,我的疏忽是,名单被宣布为:

myOb = [] 
然后我继续尝试向列表中添加元素。我应该把它们加上去的。我已将代码更改为:

myOb = []
for i in range(len(theList)):
    myOb.append(TestClass(theList[i]))
    print(myOb[i].myint)
    print(myOb[i].mylist)
现在我得到了正确的输出:

19
[1, 3, 4, 5, 6]
6
[1, 2, 3]
1
[1]
45
[1, 2, 3, 4, 5, 6, 7, 8, 9]
就这样。新手失误


p.

因此,我的疏忽是,该列表被宣布为:

myOb = [] 
然后我继续尝试向列表中添加元素。我应该把它们加上去的。我已将代码更改为:

myOb = []
for i in range(len(theList)):
    myOb.append(TestClass(theList[i]))
    print(myOb[i].myint)
    print(myOb[i].mylist)
现在我得到了正确的输出:

19
[1, 3, 4, 5, 6]
6
[1, 2, 3]
1
[1]
45
[1, 2, 3, 4, 5, 6, 7, 8, 9]
就这样。新手失误


p.

添加
python
标记,以更好地限定您的问题。谢谢。添加
python
标记,以更好地限定您的问题。谢谢