【问题标题】:How to use a list comprehension to store the nested list of a list如何使用列表推导来存储列表的嵌套列表
【发布时间】:2020-05-01 12:54:18
【问题描述】:

我想知道,如果我有nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]],我怎么能打破循环并只将项目存储在每个嵌套列表中,我所说的循环是指当我尝试时:

result = [[value_1 for value_1 in a_list] for a_list in nested_list]

唯一的结果将是......好吧,我们从 :/ 开始的确切列表。那么使用nested_list 上的列表理解来存储像[1, 2, 3, 4, 5, 6, 7, 8, 9] 这样的项目的方法是什么。我再说一遍,列表理解,而不是“for 循环”。

【问题讨论】:

  • 为什么不想使用 for 循环?
  • @Błotosmętek 谢谢你!我马上研究一下
  • @EkremDİNÇEL 我只是想看看是否有办法在上面使用列表理解
  • result = [x for a_list in nested_list for x in a_list].
  • @CodingGrind 好的

标签: python python-3.x list list-comprehension


【解决方案1】:

试试这个:

nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
output = [item for sublist in nested_list for item in sublist]
print(output) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

解释

当你对嵌套循环使用列表推导时,表达式的结构如下:

  • 最左边的表达式item 将包含返回的列表。
  • 左起第一个循环是最外层的循环,for sublist in nested_list,所以首先遍历输入列表中的每个元素并将其命名为 sublist
  • 最右边的循环,for item in sublist 是最内层的循环。在您的情况下,此循环遍历 sublist 的每个元素并将其命名为 item,最终将在输出中返回。

【讨论】:

  • 您好,谢谢您的回答,它成功了!不过,我不确定某些事情,为什么它会起作用,而更合乎逻辑的方法却不起作用:[item for item in sublist for sublist in nested_list] 我在哪里也可以了解更多信息(语法)。
  • @CodingGrind:循环从左到右读取,最左边的循环是“外”循环,最右边是最“内”的循环。您提出的方法不起作用,因为 sublist 在“外部”循环循环一次之前不存在。阅读the functional programming howto了解更多信息。
  • @CodingGrind 我已经添加了一个解释,对你有意义吗?
  • @ShadowRanger 告诉我我是否理解错误,但在列表推导中,python 读取它包含的任何 for 循环,然后检查 if 和 else 以及为它存储什么?
  • @CodingGrind:列表解析语法中没有else(如果您看到它,它是嵌入在 listcomp 中的三元条件表达式的一部分,但它不是 listcomp 特殊行为的一部分)。至于检查ifs,它的排序方式与fors 相同(所以更左边的if 的检查频率较低,并控制内部循环)。
猜你喜欢
  • 1970-01-01
  • 2017-02-17
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多