【问题标题】:How to loop over a list of lists如何遍历列表列表
【发布时间】:2019-02-14 10:20:02
【问题描述】:

最近我想出了使用 for 循环来改造列表。

首先,我这样做了:

list1 = [[1],[2],[3]]
list2 = []
for x in list1:
    list2.append(x)
print(list2)

输出是:

[[1], [2], [3]]

然后,我尝试了:

list2 = []
for x in list1:
    list2.append(x[0])

输出是:

[1, 2, 3]

有人可以向我解释一下x[0] 在这个 for 循环中做了什么吗?我认为这个索引意味着只取列表中的第一个元素。

【问题讨论】:

  • 具体来说,如果我做x[0],不应该只考虑[1],因为[1]是列表中的第一个元素吗?
  • 不是追加,而是打印每次迭代中 x 和 x[0] 的内容,您应该会看到一些有趣的东西。
  • x[0] 确实 表示只取列表的第一个元素。您正在循环一堆列表,并获取每个列表的第一个元素。
  • 问题的标题是关于列表推导和浮点数的......这两者都没有出现在你的实际问题中
  • @Jason 请考虑accepting an answer。如果您找到no answer satisfactory,请考虑编辑您的问题以提供更多信息。如果您想激励回答者,请考虑starting a bounty。接受答案表示您的赞赏、奖励作者、激励他人并告知所有人您的问题已解决。以后您可以随时改变主意并接受不同的答案。

标签: python list for-loop


【解决方案1】:

x[0] 返回列表x 的索引0 处的项目,因此通过在for 循环中附加到带有x[0] 的新列表,您将在子列表中附加值而不是比子列表本身,从而达到你想要的效果,扁平化列表。

【讨论】:

    【解决方案2】:

    你能告诉我“x[0]”在这个for循环中做了什么吗?我认为这个索引意味着只取列表中的第一个元素。

    list1 = [[1],[2],[3]] 不仅仅是一个列表,而是一个列表列表list1 的每个元素都是一个列表——尽管只有一个子元素。因此,您有效地遍历列表list1 中的每个列表,选择位置0 的第一个元素(这就是全部)并将其附加到您的新列表list2

    【讨论】:

    • @Jason 请考虑accepting an answer。如果您找到no answer satisfactory,请考虑编辑您的问题以提供更多信息。如果您想激励回答者,请考虑starting a bounty。接受答案表示您的赞赏、奖励作者、激励他人并告知所有人您的问题已解决。以后您可以随时改变主意并接受不同的答案。
    【解决方案3】:

    当你去

    for x in list1:
    

    并打印出x,您将获得:

    >[1]
    >[2]
    >[3]
    

    因为list1 中的每个元素仍然是列表!列表只有一个元素,但它们仍存储在列表中。当您使用 x[0] 时,您是在告诉 Python 您想要访问每个列表的第一个元素,这是您想要的数字。

    您可以做的另一件事比for 循环更快的是使用列表理解:

     list2 = [x[0] for x in list1]
    

    【讨论】:

      【解决方案4】:
      list1 = [[1], [2], [3]]
      
      for x in list1:
          list2.append(x[0])
      

      好的,让我们看看我们在这里做什么:

      for x in list1:

      这个循环中的x 将代表[1], [2], [3],它们是在0 位置包含某个数字的列表。

      多一点视角让我们这样看:

      list1[0][0] = 1

      list1[1][0] = 2

      list1[2][0] = 3

      【讨论】:

        【解决方案5】:

        您正在迭代包含列表的列表。 例如:

        a = [[1], [2], [3]]
        a[0] will contain list [1] #i.e it is containing list
        a[1] will contain list [2] 
        a[2] will contain list [3]
        

        如果您想访问列表列表中的内容,您必须传递 2 个索引。 例如:

        a[0][0] will contain 1 #i.e it is containing element
        a[1][0] will contain 2
        a[2][0] will contain 3
        

        您也可以尝试extend 关键字来实现相同的效果。 extend() 方法接受一个参数(一个列表)并将其添加到末尾。

        list1 = [[1],[2],[3]]
        list2 = []
        for x in list1:
            list2.extend(x)
        print(list2)
        

        【讨论】:

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