如何对两个变量应用列表理解

How to apply list comprehension for two variables

我正在尝试理解列表理解,以便我可以使我正在从事的项目的代码更有效率。我找到了一个简单易懂的例子:

L = []
for i in range (1, 10):
    if i%3 == 0:
        L.append (i)
print(L)

[3, 6, 9]

这是带有列表理解的代码:

L = [i for i in range (1, 10) if i%3 == 0]
print(L)

我试图将我刚刚学到的知识应用到这段代码中,但我无法弄清楚如何做到这一点。

L = []
M = []
for i in range (1, 10):
    if i%3 == 0:
        L.append (i)
        M.append(i*2)
print(L,M)

[3, 6, 9] [6, 12, 18]

以下内容无效 Python,但说明了我要查找的内容:

[L,M] = [i for i in range (1, 10) if i%3 == 0, i*2 for i in range (1, 10) if i%3 == 0]

您正在寻找的列表理解的语法比您想象的要简单得多:

x = [(i, i*2) for i in range (1, 1000) if i%3 == 0]
print(x)

现在是您在两个列表之后的最后一点:L,M

你需要的是这个question

的答案

因此,例如:

L, M = zip(*x)

另请参阅此 link,它动态显示了如何在 for 循环和列表理解之间转换。

您需要 2 个列表解析,其中一个生成 L,另一个生成 M。你快到了,除了几个括号

[L, M] = [[i for i in range (1, 10) if i%3 == 0], [i*2 for i in range (1, 10) if i%3 == 0]]

事实上,您不需要将 LM 放入列表中 - 这很好用

L, M = [[i for i in range (1, 10) if i%3 == 0], [i*2 for i in range (1, 10) if i%3 == 0]]
print(L)
# [3, 6, 9]
print(M)
# [6, 12, 18]

感谢您的建议!他们都帮我解决了我的心结,所以只给他们一个打绿勾有点不公平。

起初,Mortz 的 代码对我来说很有意义,因为它与我的 'solution' 非常接近。经过一番推敲,我也理解了 quamranas 解决方案,起初看起来更复杂。

像这样写下来并密切关注发生的事情有助于我理解。这对很多人来说似乎微不足道,但也许它可以帮助像我一样慢的人。

x = [(i, i*2) for i in range (1, 10) if i%3 == 0]
#i = 3
#x = [(3,6)]
#i = 6
#x = [(3,6),(6,12)]
#i = 9
#x = [(3,6),(6,12),(9,18)]
print(x)
L,M = zip(*x)
print(L,M)
#(3, 6, 9) (6, 12, 18)