我想了解python中列表理解的概念 给定代码 输出

我想了解python中列表理解的概念 给定代码 输出,python,list-comprehension,Python,List Comprehension,我知道理解可以分为以下几点: for a in range(3): for b in range(a): print(a,b) 有人能解释一下上面提供的输出是如何产生的……列表理解没有翻译成: for a in range(3): for b in range(a): print(a,b) 而是: x = [] for a in range(3): for b in range(a): x.append((a, b))

我知道理解可以分为以下几点:

for a in range(3):
    for b in range(a):
        print(a,b)

有人能解释一下上面提供的输出是如何产生的……

列表理解没有翻译成:

for a in range(3):
    for b in range(a):
        print(a,b)
而是:

x = []
for a in range(3):
    for b in range(a):
        x.append((a, b))

列表理解的作用是:

ret = []
for a in range(3):
    for b in range(a):
        ret.append((a,b))

print(ret)  # [(1, 0), (2, 0), (2, 1)] 

它返回您正在获取的列表…

您正在并行运行的
范围(3)
范围(a)

实际情况是
a
被设置为
0
1
,最后是
2

然后,为
范围(a)
中的每个元素定义
b

现在生成数据:

a = 0
range(0) # nothing
a = 1
range(1) # (0, )
(1, 0) # first pair of (a, b) for a = 1
a = 2
range(2) # (0, 1)
(2, 0) # first pair of (a, b) for a = 2
(2, 1) # second pair of (a, b) for a = 2
# end

考虑到上述情况,结果是
[(1,0),(2,0),(2,1)]

我想你要找的是:

  • 首先,
    a=0
    因此内部循环跳过,因为
    range(0)
    返回一个空列表
  • 然后,
    a=1
    因此,当范围(1)与
    [0]
    相等时,只对
    0执行内部循环,因此第一对是
    (1,0)
  • a=2
    内部循环运行
    b=0
    b=1
    ,因此另外两对
    (2,0)
    (2,1)
  • 我想现在发生的事情很清楚。对吧?

    ret = []
    for a in range(3):
        for b in range(a):
            ret.append((a,b))
    
    print(ret)  # [(1, 0), (2, 0), (2, 1)] 
    
    a = 0
    range(0) # nothing
    a = 1
    range(1) # (0, )
    (1, 0) # first pair of (a, b) for a = 1
    a = 2
    range(2) # (0, 1)
    (2, 0) # first pair of (a, b) for a = 2
    (2, 1) # second pair of (a, b) for a = 2
    # end