当前位置: 首页 > 面试题库 >

嵌套列表理解

红经亘
2023-03-14
问题内容

我试图在一个内部列表中使用外部列表理解的值:

[ x for x in range(y) for y in range(3) ]

但是不幸的是,这会引发NameError,因为名称y是未知的(尽管外部列表理解指定了该名称)。

这是Python的局限性(尝试过2.7.3和3.2.3)还是有充分的理由解释为什么它不起作用?

是否有计划摆脱限制?

是否有解决方法(可能我没有弄清楚一些不同的语法)来实现我想要的?


问题答案:

您在谈论列表 推导 ,而不是生成器表达式。

您需要交换for循环:

[ x for y in range(3) for x in range(y) ]

您需要阅读它们,就像它们嵌套在常规循环中一样:

for y in range(3):
    for x in range(y):
        x

具有多个循环的列表推导遵循相同的顺序。请参阅清单理解文档:

提供列表理解时,它由单个表达式组成,后接至少一个for子句和零个或多个fororif子句。在这种情况下,新列表的元素是通过将每个fororif子句视为一个块,从左到右嵌套,并在每次到达最里面的块时评估表达式以产生一个列表元素而生成的元素。

当然,生成器表达式也是一样,但是它们使用()括号而不是方括号,并且不会立即实现:

>>> (x for y in range(3) for x in range(y))
<generator object <genexpr> at 0x100b50410>
>>> [x for y in range(3) for x in range(y)]
[0, 0, 1]


 类似资料:
  • 问题内容: 解释我的问题的最好方法是举一个例子: example.py: 当我在python 2下运行它时,它工作正常,但是在python 3下,我得到了for类(但不是class ): 为什么只有class会引发a ,为什么只在Python 3下? 问题答案: 类作用域在Python 3中有点奇怪,但这是有充分理由的。 在Python 2中,迭代变量(以及您的示例中)从列表理解中泄漏出来,并将包

  • 问题内容: 我想了解嵌套列表的理解。下面,我列出了一个列表理解表达式及其for循环等效项。 我不知道我的理解是否正确。 例如, 相当于 如果可以概括一下,我猜 表格可以翻译为以下内容。(我希望我是对的) 对于更简单的情况, 等于 而, 等于 我问了一个类似的问题,即用于复杂列表理解 的循环表达式的等效项。那里给出的答案是在理解了表单内部的内容之后重构了表单。 我想知道它是如何系统地工作的,因此我可

  • 问题内容: 我有这个嵌套列表: 现在,我要做的是将列表中的每个元素转换为float。我的解决方案是这样的: 但这可以使用嵌套列表理解来完成吗? 我所做的是: 但是结果是一堆100的总数为2400。 任何解决方案,解释将不胜感激。谢谢! 问题答案: 这是使用嵌套列表理解的方法: 这将为你提供一个列表列表,与你开始时的列表类似,只是使用浮点数而不是字符串。如果你想要一个固定列表,则可以使用。

  • 问题内容: 我了解简单列表理解的工作原理,例如: 而且我也了解嵌套列表的综合工作原理: 所以,当我尝试这样做 我期望这样: 但是我得到了: 所以我有更好的方法解决问题,这给了我我想要的 但是我不明白在第一个代码中返回9个元素 问题答案: 它有9个数字的原因是因为python对待 类似于 即,它是一个嵌套循环

  • 问题内容: 谁能告诉我如何在嵌套列表中调用索引? 通常我只写: 但是如果我有一个带有嵌套列表的列表,如下所示: 我想分别浏览每个索引? 问题答案: 如果您确实需要索引,则可以按照内部列表再次执行以下操作: 但是遍历列表本身是更pythonic的: 如果您确实需要索引,也可以使用:

  • 本文向大家介绍Markdown 嵌套列表,包括了Markdown 嵌套列表的使用技巧和注意事项,需要的朋友参考一下 示例 列表可以嵌套 八个空间 十二个空格 四个空间 然后回来