2015-11-19 128 views
3

我想创建一个2D列表,我不断得到相同的错误“TypeError:列表索引必须是整数,而不是元组”我不明白为什么,或者如何正确使用2D列表。2d列表不能正常工作

Total = 0 
server = xmlrpclib.Server(url); 
mainview = server.download_list("", "main") 
info = [[]] 
info[0,0] = hostname 
info[0,1] = time 
info[0,2] = complete 
info[0,3] = Errors 
for t in mainview: 
    Total += 1 
    print server.d.get_hash(t) 
    info[Total, 0] = server.d.get_hash(t) 
    info[Total, 1] = server.d.get_name(t) 
    info[Total, 2] = server.d.complete(t) 
    info[Total, 3] = server.d.message(t) 

    if server.d.complete(t) == 1: 
    Complete += 1 
    else: 
    Incomplete += 1 
    if (str(server.d.message(t)).__len__() >= 3): 
    Error += 1 
info[0,2] = Complete 
info[0,3] = Error 

一切正常,除了试图处理信息。

+0

Python中没有这样的“2d列表”。你有什么是一个列表,其内容也列表。如果你想想这是什么意思,你会明白为什么这不起作用。 – BrenBarn

回答

4

你的错误是在访问2D-列表,修改:

info[0,0] = hostname 
info[0,1] = time 
info[0,2] = complete 
info[0,3] = Errors 

到:

info[0].append(hostname) 
info[0].append(time) 
info[0].append(complete) 
info[0].append(Errors) 

同去info[Total, 0]

+0

这仍然会导致错误,因为列表是空的开始,即列表索引超出范围错误 –

+0

@RNar感谢您的收获。纠正。 – alfasin

1

创建info的方式,是只包含一个元素的列表,即一个空列表。当处理列表,你必须解决诸如

info[0][0] = hostname 

有关初始化嵌套的项目,你必须创建由例如列表的列表

# create list of lists of 0, size is 10x10 
info = [[0]*10 for i in range(10)] 

当使用numpy阵列,你可以像你一样解决的元素。

“列表清单”的一个优点是并非所有“2D列表”条目都具有相同的数据类型!

-1
info = [[] for i in range(4)] # create 4 empty lists inside a list 
info[0][0].append(hostname) 
info[0][1].append(time) 
info[0][2].append(complete) 
info[0][3].append(Errors) 

您需要先创建2d数组。

+0

那不是你如何调用列表中的元素 –