我试图用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 = []'语句实际上是做什么的?
答案 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
列表时间。
有帮助吗?