【问题标题】:Python for loop: index a one-item list in a list of listsPython for循环:在列表列表中索引单项列表
【发布时间】:2017-09-07 15:07:54
【问题描述】:

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

例如: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() )

在“for n in qnum_low[i]:”处中断第一次迭代,导致错误“TypeError: list indices must be integers, not list”

我应该能够索引到一个包含一个项目的列表,对吧?看看我刚才是怎么做到的。

【问题讨论】:

    标签: python list for-loop indexing split


    【解决方案1】:

    您的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):
             ... 
    

    如果出于某种原因你坚持只对索引进行迭代,那么你通常会被这种相当笨重、非 Pythonic 的语法所困扰:

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

    【讨论】:

      猜你喜欢
      • 2019-05-09
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2020-07-30
      • 2020-03-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      相关资源
      最近更新 更多