list = []与从列表中删除所有元素之间的区别

时间:2019-07-02 12:58:52

标签: python

我试图用Python列出列表。我观察到list = []并从列表中删除所有元素会得到不同的输出。有人可以解释为什么吗?

list11=[]
for i in range(10):
    temp=[]
    temp.append(i)
    list11.append(temp)
print(list11)

输出:

[[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]

temp=[1]
list11=[]
for i in range(2,10):
    temp.remove(i-1)
    temp.append(i)
    list11.append(temp)
print(list11)

输出:

[[9], [9], [9], [9], [9], [9], [9], [9]]

我认为第二种情况的输出是因为将temp附加了8次,而在上一次迭代中,temp的值为[9]。我只是不明白为什么两个输出都不同。 'temp = []'语句实际上是做什么的?

1 个答案:

答案 0 :(得分:0)

理解代码的最简单方法是打印两个列表的中间状态。

此代码:

print('Case 1')
num_list = []
for i in range(10):
    temp = []
    temp.append(i)
    num_list.append(temp)

    print('i: {} | temp: {:20s} | num_list: {}'.format(
        i, str(temp), str(num_list)))

print()
print('Case 2')
num_list = []
temp = [1, ]
for i in range(2,10):
    temp.remove(i-1)
    temp.append(i)
    num_list.append(temp)

    print('i: {} | temp: {:20s} | num_list: {}'.format(
        i, str(temp), str(num_list)))

提供以下输出:

Case 1
i: 0 | temp: [0]                  | num_list: [[0]]
i: 1 | temp: [1]                  | num_list: [[0], [1]]
i: 2 | temp: [2]                  | num_list: [[0], [1], [2]]
i: 3 | temp: [3]                  | num_list: [[0], [1], [2], [3]]
i: 4 | temp: [4]                  | num_list: [[0], [1], [2], [3], [4]]
i: 5 | temp: [5]                  | num_list: [[0], [1], [2], [3], [4], [5]]
i: 6 | temp: [6]                  | num_list: [[0], [1], [2], [3], [4], [5], [6]]
i: 7 | temp: [7]                  | num_list: [[0], [1], [2], [3], [4], [5], [6], [7]]
i: 8 | temp: [8]                  | num_list: [[0], [1], [2], [3], [4], [5], [6], [7], [8]]
i: 9 | temp: [9]                  | num_list: [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]]

Case 2
i: 2 | temp: [2]                  | num_list: [[2]]
i: 3 | temp: [3]                  | num_list: [[3], [3]]
i: 4 | temp: [4]                  | num_list: [[4], [4], [4]]
i: 5 | temp: [5]                  | num_list: [[5], [5], [5], [5]]
i: 6 | temp: [6]                  | num_list: [[6], [6], [6], [6], [6]]
i: 7 | temp: [7]                  | num_list: [[7], [7], [7], [7], [7], [7]]
i: 8 | temp: [8]                  | num_list: [[8], [8], [8], [8], [8], [8], [8]]
i: 9 | temp: [9]                  | num_list: [[9], [9], [9], [9], [9], [9], [9], [9]]

在情况1中,num_list包含10个不同的列表(在每次迭代中,都会创建并附加一个新的temp列表),每个列表都包含一个元素。

在情况2中,num_list包含对同一列表temp的引用的9倍;在每次迭代中,都使用相同的temp列表,并且仅修改其内容,这就是为什么看起来值在更改的原因,实际上,它只是被修改并包含9的一个temp列表时间。

有帮助吗?