如何对两个变量应用列表理解
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]]
事实上,您不需要将 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]]
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)
我正在尝试理解列表理解,以便我可以使我正在从事的项目的代码更有效率。我找到了一个简单易懂的例子:
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]]
事实上,您不需要将 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]]
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)