Python列表增量列表

时间:2014-12-08 22:49:30

标签: python list

x  = 0

y = []

for i in range (5):
    y.append(x)
    x+=1

print y

给出:

[0, 1, 2, 3, 4]

但是,

x  = range (2)

y = []

for i in range (5):
    y.append(x)
    x[0]+=1

print y

我会想(希望)这给了我:

[[0, 1], [1, 1], [2, 1], [3, 1], [4, 1]]

但它只是给了我:

[[5, 1], [5, 1], [5, 1], [5, 1], [5, 1]]

我通过在for循环中放置'print y'来测试它,显然正在发生的是当x [0] + = 1时,所有已经在'y'内的'x'正在更新新的价值。

如何编写程序以便'忘记''已经在列表中的'y'仍然是变量(因此不会继续更新它们)?

我意识到我可以专门写这个:

y = []

for i in range (5):
    x = [i, 1]
    y.append(x)

但是如果我想在for循环之外定义x呢?我想不出我想这样做的时候,但我还是想知道。

2 个答案:

答案 0 :(得分:2)

如果在for循环外定义x,则每次都是对同一列表的引用。如果希望每个子列表都是独立的,则必须在循环内创建它。你的最终代码块有效。

然而,更简洁和pythonic的做法是list comprehension

y = [[i, 1] for i in range(5)]

答案 1 :(得分:2)

@tzaman提供了完美的解决方案,但您需要自己的代码:

x  = range (2)

y = []

for i in range (5):
    y.append(x[:]) #You should append copy of x
    x[0]+=1

print y

给出:

[[0, 1], [1, 1], [2, 1], [3, 1], [4, 1]]