python嵌套列表连接中+=和append的区别



例如:

re=[]
for i in range(5):
#fill code here
  • 1.)如果我们这样做"re.append(i), re为[0,1,2,3,4]
  • 2.)如果我们这样做;re.append([i])", re将是[[0],[1],[2],[3],[4]]
  • 3.)如果我们这样做;re+=[i]",将是[0,1,2,3,4]
  • 4.)如果我们这样做;re+=[i],",是的,后面加逗号,re将是[[0],[1],[2],[3],[4]]

我的问题是,逗号在#4中的作用是什么?我一直认为后面的逗号会使它们变成元组,但它们显然是列表。所以我也尝试了"re+=i,",和re将仍然是列表:[0,1,2,3,4]

然后我又试了一次:

re=[]
re=re+[1]

和现在的re=[1]

re=[]
re=re+[1], 

然后是re=([1],), re现在是一个元组,不再是一个列表

最后是

re=[]
for i in range(5):
re=re+[i]

现在是[0,1,2,3,4]

但是如果我把它改成:

re=[]
for i in range(5):
re=re+[i],
现在我得到:TypeError: can only concatenante tuple (not "list") to tuple 谁能给我解释一下这是怎么回事?我试着在谷歌上搜索答案,但似乎没有人谈论这个

[i],等价于([i],),它是一个只有一个元素的元组,而这个元素就是列表[i]

当您使用+=将任何序列连接到列表时,它会遍历该序列并将每个元素附加到列表中。所以

re += [i],

等价于

for x in ([i],):
re.append(x)

由于([i],)中只有一个元素,这进一步相当于:

re.append([i])

与#2中的相同,所以得到相同的结果。

相关内容

  • 没有找到相关文章