【问题标题】:How can I iterate over a list of lists?如何遍历列表列表?
【发布时间】:2017-07-04 11:58:57
【问题描述】:

我正在尝试对列表进行排序。我如何才能打印或迭代每个列表中的第一个和最后一个元素?下面的非工作代码:

from numpy import *
xs=[[1.,2.,3.],[4.,5.,6.],[7.,8.,9.]]

for i in xs:
    for j in xs[i]:
        print(xs[1],xs[-1])

如果需要,追溯错误:

runfile('/Users/Alex/untitled9.py', wdir='/Users/Alex')
Traceback (most recent call last):

  File "<ipython-input-14-8a28382c7f81>", line 1, in <module>
    runfile('/Users/Alex/untitled9.py', wdir='/Users/Alex')

  File "/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "/anaconda/lib/python3.6/site-packages/spyder/utils/site/sitecustomize.py", line 102, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "/Users/Alex/untitled9.py", line 13, in <module>
    for j in xs[i]:

TypeError: list indices must be integers or slices, not list

【问题讨论】:

  • for i in xs:print(i[1], i[-1]) 应该可以正常工作。
  • 其实应该是for i in xs:print(i[0], i[-1])
  • 如果我想同时为多个列表做同样的事情?
  • 这能回答你的问题吗? Iterating through list of list in Python

标签: python list


【解决方案1】:

您已经在 cmets 中得到了答案。但要了解为什么您的代码在当前状态下无法运行,请查看以下内容:

>>> xs = [[1.,2.,3.], [4.,5.,6.], [7.,8.,9.]]
>>> for i in xs:
...    print(i)
... 
[1.0, 2.0, 3.0]
[4.0, 5.0, 6.0]
[7.0, 8.0, 9.0]

for 循环遍历 元素,而不是索引。变量i 在这里可能令人困惑。无论如何,在循环内部,i 将在每次迭代中包含一个子列表。所以xs[i]在这里是一个无效的操作——你只能提供整数作为python列表的索引。

如果您想获取每个子列表的第一个和最后一个元素,您只需打印出i[0]i[-1]

在相关说明中,您可以使用 range 函数迭代索引:

 for i in range(len(xs)):
     print(xs[i][0], xs[i][-1])

但不建议这样做,因为直接迭代元素会更有效,尤其是对于这个用例。

您也可以使用enumerate,如果您需要两者:

 for c, i in enumerate(xs):
     print(i[0], xs[c][-1]) # both work here

【讨论】:

  • 如果您需要索引和可以使用的值enumerate
【解决方案2】:

在您给出的代码中:

for i in xs:
    for j in xs[i]:
        print(xs[1],xs[-1])

在外部for循环中,变量i存储了内部数组,所以在内部for循环中,当你执行xs[i]时,会报错。这是因为您只能使用整数作为数组中的索引(这是有道理的,因为您需要第 0 个或第 1 个或第 2 个元素,所以没有像第 [1,2,3] 个元素这样的东西,@987654324 @ 在您编写的代码中基本上意味着)。

现在,为了简单地遍历多维数组:

for i in xs:
    for j in i:
        print(j)
    print("\n")

这将给出:

[1.0, 2.0, 3.0]
[4.0, 5.0, 6.0]
[7.0, 8.0, 9.0]

如果您只想打印内部列表的第一项和最后一项,可以这样做:

for i in xs:
    print(i[0], i[-1], "\n")

希望对你有帮助

【讨论】:

    【解决方案3】:

    当你迭代一个列表时,你会从列表的每个成员中得到一个 item,如果那个 item 是一个列表,你可以创建第二个循环来迭代项目,像这样:

    for items in xs:
        for elem in items:
            # in here you get each element of the inner list
    

    要获得第一个和最后一个值,您不需要像之前回答的那样:

    for item in xs:
        print(item[0], item[-1]
    

    如果你觉得有点好笑,你甚至可以使用一个综合列表将它们存储在你自己的列表中,如下所示:

    funny_list= [[item[0], item[-1]] for item in xs]

    【讨论】:

      【解决方案4】:

      试试这个:

      li = []
      for i in range(len(xs)):
          li.append([xs[i][0],xs[i][-1]])
      
      output: [[1.0, 3.0], [4.0, 6.0], [7.0, 9.0]]
      

      【讨论】:

        猜你喜欢
        • 2019-02-14
        • 2013-01-26
        • 1970-01-01
        • 2010-12-18
        • 2019-12-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-06-22
        相关资源
        最近更新 更多