有人可以向我解释这个程序吗?

时间:2011-04-05 04:20:28

标签: python

以下表达式作为值产生什么:

[(x, x*y) for x in range(2) for y in range(2)]
  1. [(0,0), (0,1), (1,0), (1,1)]

  2. [0, 1, 2]

  3. [(0,0), (1,0), (0,0), (1,1)]

  4. [(0,0), (0,0), (1,0), (1,1)]

  5. 以上都不是

  6. 答案是 4 ,但我不明白为什么。

4 个答案:

答案 0 :(得分:2)

读作:

for x in range(2): # 0,1
  for y in range(2): # 0,1
     (x, x*y)

答案 1 :(得分:2)

假设python 2。

range(2)返回列表[0, 1]

[(x, x*y) for x in [0, 1] for y in [0,1]]

因此,x和y将是列表[0, 1][0, 1]

的所有组合
[(x, x*y) for (x, y) in [(0, 0), (0, 1), (1, 0), (1, 1)]]

x    y    x*y    (x, x*y)
0    0    0      (0, 0)
0    1    0      (0, 0)
1    0    0      (1, 0)
1    1    1      (1, 1)

答案 2 :(得分:1)

将其视为

list = [];
for x in range(2):
  for y in range(2):
    list.append((x, x*y))

基本上它将使用以下X,Y值

迭代4次
X=0, Y=0
X=0, Y=1
X=1, Y=0
X=1, Y=1

零次任何事情总是为零,所以你得到4个阵列

First Index = 0, 0*0
Second Index = 0, 0*1
Third Index = 1, 1*0
Fourth Index = 1, 1*1

答案 3 :(得分:1)

嵌套列表推导的工作方式与编写类似循环的方式相同。

所以你的示例列表理解就像这个生成器函数一样:

def example():
    for x in range(2):
        for y in range(2):
            yield (x, x*y)