繁体   English   中英

如何执行这个列表理解代码?

[英]How to execute this list comprehension code?

我试图理解这段代码,但到目前为止我无法绘制任何逻辑。 我已经执行它以获得输出,但仍然无法弄清楚。 这是代码:

lst = [[c for c in range(r)] for r in range(3)] 
for x in lst: 
    for y in x: 
       if y < 2: 
           print('*', end='')

我从右到左执行它,即从右侧循环“for r in range(3)”开始。 首先,r 将为“0”,然后将分配给左侧循环“c for c in range(r)”。 在此之后,我不知道它将如何进一步执行。

请如果有人可以解释,那就太好了。 谢谢/

lst = [[c for c in range(r)] for r in range(3)] 

外循环[...] for r in range(3)]将列出内循环[c for c in range(r)]其中r依次为 0、1 和 2 ( range(3)的结果)。

所以内循环[c for c in range(r)]将给出的每个元素的列表range(r)这应该给[][0][0, 1] 所以,最终结果是[[], [0], [0, 1]]

请注意,这等效于以下内容:

lst = []
for r in range(3):
   lst.append([])         # since list comprehension in list comprehension
   for c in range(r):
        lst[-1].append(c) # -1 index is the last index in python

for x in lst: 
    for y in x: 
       if y < 2: 
           print('*', end='')

对于lst每个列表,对于该列表中的每个元素,如果它小于 2,则打印* 。换句话说,“对于列表中的每个单独元素”

已经发布了很好的答案。 没有太多要补充的。 我要补充的是... print() 是您在编程中最好的朋友之一 如果有疑问,打印可能会给出一些清晰度。

例如,对于更改值(如@sshashank124 建议)和执行打印,让您看到 lst 是什么。 一旦你知道 lst 是什么,你就可以弄清楚发生了什么以及下游代码。

lst = [[c for c in range(r)] for r in range(3)]
print(lst)

lst = [[c for c in range(r)] for r in range(4)]
print(lst)

lst = [[c for c in range(r)] for r in range(5)]
print(lst)

lst = [[c for c in range(r)] for r in range(6)]
print(lst)

这为 3、4、5 和 6 的值提供了四个输出......你可以看到模式

[[], [0], [0, 1]]
[[], [0], [0, 1], [0, 1, 2]]
[[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3]]
[[], [0], [0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]

希望这能给你一些额外的价值,否则我很抱歉。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM