带有嵌套range()函数的Python代码段

2024-09-24 08:24:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图理解以下python代码片段:

lst = [[c for c in range(r)] for r in range(3)] #line1
for x in lst:                                   #line2
    for y in x:                                 #line3
        if y < 2:                               #line4
            print('*', end='')                  #line5

我知道range(3)等函数本身的含义,但我不了解上下文。看到这段嵌套的代码有点复杂。“lst”的第一行最容易混淆。为什么第一条生产线会产生以下输出:

[[], [0], [0, 1]]

那么line2和line3是如何协同工作的呢?提前谢谢你的回答。欢迎提出任何意见!你知道吗


Tags: 函数代码inforifrangeendprint
3条回答

在嵌套列表理解中,r以值0开始,因此内部列表的计算结果为[c for c in range(0)],即[]。当r为1时,其计算结果为[c for c in range(1)],即[0]。当c为2时,有[c for c in range(2)],即[0,1]。当这些元素在外部列表中生成时,它们将作为列表的列表元素返回。所以在lst中有一个列表。你知道吗

for循环然后在第2行中的每个列表上迭代。然后第3行遍历每个列表中的整数元素。你知道吗

回复

"The first line with the 'lst' is most confusing.":

无论在哪里看到[ ...for...],都有所谓的“列表理解”。这是一种基于元素的单行循环描述建立列表的方法。例如:

list1 = [letter for letter in 'abcd'] 

以及

list2 = []
for letter in 'abcd':
    list2.append(letter)

产生相同的列表list1list2

在您的例子中,有两组[]和两个for语句,因此在列表理解中有一个列表理解:因此结果不仅是一个列表,而且是一个嵌套列表。你知道吗

回复

"and how does line2 and line3 works together?"

第2行遍历列表中的所有项lst。 但是这些项目中的每一个也是一个列表,因为您有一个嵌套的列表。因此,第3行遍历内部列表中的每个项。你知道吗

代码段创建了一个列表列表,其中大小(以及项的实际值)取决于第一级列表中的索引。你知道吗

代码段与

result = []
for k in range(3):
    result.append([])
    for v in range(k):
        result[k].append(v)

print(result)
=>>>
[[], [0], [0, 1]]

相关问题 更多 >