Python for循环:索引列表列表中的单项列表

时间:2017-04-12 02:39:37

标签: python list for-loop indexing split

我有一个列表,其中包含我要分割的字符串列表。有些列表只有一个字符串,但其他列表有更多字符串。

ex: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']这是完美的。但是

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() )

在qnum_low [i]中对n的第一次迭代中断:"导致错误" TypeError:list indices必须是整数,而不是list"

我应该可以索引到包含一个项目的列表,对吗?看看我是如何做到的。

1 个答案:

答案 0 :(得分: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])):
        ....