【发布时间】:2020-12-14 00:56:17
【问题描述】:
我正在提高我的列表理解能力,寻找练习来加深我的理解。但我已经达到了一个我似乎无法绕过的地方。假设我想要一个包含范围(1,3)中3个随机数字的所有可能列表的列表,其中每个列表的总和不等于3。
[[0, 0, 0], [0, 0, 1], [0, 0, 2], [0, 1, 1], [0, 2, 0] ...]
显然,我需要使用嵌套列表推导来做到这一点。但我不确定该怎么做。据我所知,我无法将列表分配给列表理解中的变量。但我需要该变量来引用输出:
list7 = [[randint(0,2) for x in range(3)] for y if sum(y) != 3]
这给了我一个语法错误。我已经尝试先将内部列表分配给一个变量,但这似乎也不起作用:
y = [randint(0,2) for x in range(3)]
list7 = [y for y if sum(y) != 3]
不过,让我感到困惑的是,“y”在这里根本没有给出任何错误。即使 randint 没有分配给“x”,它的行为也符合我的预期。显然这里有一些我不明白的地方。所以,这是我的问题:如果我不能将嵌套列表分配给理解中的变量,我该如何在列表理解中重复嵌套列表?提前致谢。
【问题讨论】:
-
尝试由内而外地工作,以确保您了解您的数据结构及其内容。 List comprehensions 在 python 文档中得到了很好的描述,包括一个非常接近你的例子。此外,解决您自己的语法问题将教给您的不仅仅是在这里得到答案。
-
如果我能得到的唯一帮助是“去阅读文档并尝试解决你自己的问题”,彼得,我看不到堆栈溢出的意义。我一直在这样做,我遇到了麻烦。这就是我来这里的原因。
-
外部列表推导不是
list7中的列表推导,因为没有任何东西被迭代。 IE。in foo子句。 -
@PleasantNightmares 很抱歉你有这种感觉。正如@dpwrussel 指出的那样,您的第二个列表理解中没有
in。有些事情只需要反复琢磨、重新检查等。你会明白的。