简体   繁体   中英

difference between += and append in python nested list concatenating

for example:

re=[]
for i in range(5):
    #fill code here
  • 1.) if we do " re.append(i) ", re will be [0,1,2,3,4]
  • 2.) if we do " re.append([i]) ", re will be [[0],[1],[2],[3],[4]]
  • 3.) if we do " re+=[i] ", re will be [0,1,2,3,4]
  • 4.) if we do " re+=[i], ", yes, with a trailing comma, and re will be [[0],[1],[2],[3],[4]]

my question is, what does the comma do in #4 ? I always thought a trailing comma will make them into tuples, but they are lists apparently. So I also tried " re+=i, ", and re will still be the list: [0,1,2,3,4]

then I did another try with the following:

re=[]
re=re+[1]

and now re=[1] if I do:

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

then re=([1],) , and re now is a tuple, no longer a list

and finally if I do:

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

re is now [0,1,2,3,4]

but if I changed it to:

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

now I get: TypeError: can only concatenante tuple (not "list") to tuple

Could anyone explain it to me what's going on here ? I tried googling for answers, but no one seems to talk about this

[i], is equivalent to ([i],) , which is a tuple with one element, and that element is the list [i] .

When you concatenate any sequence to a list with += , it iterates over the sequence and appends each element to the list. So

re += [i],

is equivalent to

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

Since there's only one element in ([i],) , this is further equivalent to:

re.append([i])

which is what you have in #2, so you get the same result.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM