Python 如何执行此列表理解代码?

Python 如何执行此列表理解代码?,python,Python,我试图理解这段代码,但到目前为止,我无法得出任何逻辑。我已经执行了它以获得输出,但仍然无法理解。代码如下: 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='') lst=[[c代表范围(r)中的c]代表范围(3)中的r] 对于lst中的x: 对于x中的y: 如果y

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

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='')
lst=[[c代表范围(r)中的c]代表范围(3)中的r]
对于lst中的x:
对于x中的y:
如果y<2:
打印('*',结束='')
我从右到左执行它,也就是说,从右边的循环开始“对于范围(3)中的r”。首先,r将是“0”,然后将其分配给左侧循环“c代表范围(r)中的c”。在这一点之后,我不知道它将如何进一步执行

如果有人能解释,那就太好了。 谢谢/

范围(3)内r的外循环
[…]将列出范围(3)内c的内循环
[c]的结果
的r
依次为0、1和2(范围(3)的结果
的结果)

因此,内部循环
[c代表范围(r)中的c]
将给出
范围(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

lst中x的
:
对于x中的y:
如果y<2:
打印('*',结束='')

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

已经发布了很好的答案。没什么可补充的。我要补充的是print()是您在编程方面最好的朋友之一。如果有任何疑问,打印可能会提供一些清晰度

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

lst=[[c代表范围(r)中的c]代表范围(3)中的r]
打印(lst)
lst=[[c代表范围(r)内的c]代表范围(4)内的r]
打印(lst)
lst=[[c代表范围(r)内的c]代表范围(5)内的r]
打印(lst)
lst=[[c代表范围(r)内的c]代表范围(6)内的r]
打印(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]]

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

6
而不是
3
来尝试它,以查看模式:@sshashank124谢谢。这很有帮助。现在就清除:)!!尝试使用6可以让它更清晰。非常感谢您增加了清晰性。这很有帮助,代码现在很清楚:)。
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='')