第一个元素在python列表理解中不正确

时间:2014-10-25 00:33:29

标签: python list list-comprehension

如果我使用:

[(x, y) for x in range(5) for y in range(0, x * 6)]

我得到了

[(1, 0), (1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (2, 0), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (2, 10), (2, 11), (3, 0), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (3, 10), (3, 11), (3, 12), (3, 13), (3, 14), (3, 15), (3, 16), (3, 17), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (4, 10), (4, 11), (4, 12), (4, 13), (4, 14), (4, 15), (4, 16), (4, 17), (4, 18), (4, 19), (4, 20), (4, 21), (4, 22), (4, 23)]

为什么第一个元素(1,0)?

2 个答案:

答案 0 :(得分:4)

因为当x is 0时,y in range(0, x * 6)变为y in range(0, 0),这是一个空的范围。

答案 1 :(得分:0)

首先,让我们来看看双循环意味着什么:

[(x, y) for x in range(5) for y in range(0, x * 6)]

与:

相同
answer = []
for x in range(5):
    for y in range(0, x*6):
        answer.append((x,y))

[source]

因此,在x的第一次迭代中,x取值0。因此,内部表达变为

for y in range(0, 0*6)

相同
for i in range(0, 0)

好吧,range(0,0)中没有元素。因此,内部循环永远不会在x=0

时创建元素