Python列表+列表与list.append()

时间:2011-04-08 01:43:06

标签: python list

今天我花了大约20分钟试图找出原因 这按预期工作:

users_stories_dict[a] = s + [b] 

但这会有None值:

users_stories_dict[a] = s.append(b)

任何人都知道为什么追加功能不会返回新列表?我正在寻找做出这个决定的某种合理理由;它现在看起来像是一个Python新手。

2 个答案:

答案 0 :(得分:10)

append通过实际修改列表来工作,所以所有的魔法都是副作用。因此,append返回的结果为None。换句话说,人们想要的是:

s.append(b)

然后:

users_stories_dict[a] = s

但是,你已经想出了那么多。至于为什么这样做,虽然我不知道,我的猜测是它可能与0(或false)退出值有关,表明操作正常进行,并通过返回None来查找其作用是在适当位置修改其参数的函数,并报告修改成功。

但我同意如果它返回修改后的列表会很好。至少,Python的行为在所有这些功能中是一致的。

答案 1 :(得分:9)

append()方法返回None,因为它通过添加附加为元素的对象来修改它自己的列表,而+运算符连接两个列表并返回结果列表

例如:

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

print a+b         # returns a list made by concatenating the lists a and b
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]

print a.append(b) # Adds the list b as element at the end of the list a and returns None
>>> None

print a           # the list a was modified during the last append call and has the list b as last element
>>> [1, 2, 3, 4, 5, [6, 7, 8, 9, 0]]

因为您可以看到最简单的方法就是将两个列表一起添加,即使您将列表b附加到使用append(),也无法获得您想要的结果而无需额外的工作