[英]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.