2017-04-12 160 views
-1

我有一个包含我尝试拆分的字符串列表的列表。有些列表只有一个字符串,但其他列表则有更多。Python for循环:索引列表中的一个项目列表

例如:qnum = [[(” 1 2 3 ')],[(' 1 1 1 '),(' 3 4 5 ')],[(' 5 6 7' )]]

print 'qnum', qnum[0][0].split() 
print 'qnum', qnum[1][1].split() 

授予:qnum ['1','2','3']和qnum ['3','4','5']这是完美的。但在“在qnum_low N [1]:”第一次迭代

qnum2 = [] 
for i in qnum: #which list in qnum 
    for n in qnum[i]: #which string in the list 
     qnum2.append(qnum_low[i][n].split()) 

休息导致错误“类型错误:列表索引必须是整数,没有列出”

我应该能够索引到一个列表中有一个项目,对不对?看看我是如何做到的。

回答

3

TypeError从你的假设是源自迭代for i in qnum超过指数为qnum。它不是 - 它遍历项目本身。这通常会产生更短,更干净的代码:

qnum2 = [] 
for sublist in qnum: 
    for item in sublist: 
     qnum2.append(item.split()) 

正因如此,事实上,这几行字可以浓缩成一个行分配使用列表中理解语法:

qnum2 = [item.split() for sublist in qnum for item in sublist] 

如果你曾经你真的需要在循环中的某些其他目的的指数in,这就是enumerate可以帮助你:

for i, sublist in enumerate(qnum): 
    for n, item in enumerate(sublist): 
     ... 

如果由于某种原因,你坚持迭代索引,那么你通常会停留在这种相当笨拙的非拼音语法:

for i in range(len(qnum)): 
    for n in range(len(qnum[i])): 
     ....