今天,我花了大约20分钟试图弄清楚为什么它会像预期的那样工作:
users_stories_dict[a] = s + [b] 但这将具有None值:
users_stories_dict[a] = s.append(b)有人知道为什么append函数不返回新列表吗?我正在寻找做出这个决定的某种合理的原因;对我来说,这看起来像是Python新手弄错了。
发布于 2011-04-08 09:48:50
append实际上是通过修改一个列表来工作的,所以所有的魔力都体现在副作用上。因此,append返回的结果为None。换句话说,一个人想要的是:
s.append(b)
然后:
users_stories_dict[a] = s
但是,你已经弄明白了那么多。至于为什么这样做,虽然我真的不知道,但我猜这可能与指示操作正常进行的0 (或false)退出值有关,并且通过为作用是就地修改其参数的函数返回None来报告修改成功。
但我同意,如果它返回修改后的列表,那会很好。至少,Python的行为在所有这些函数中都是一致的。
发布于 2011-04-08 09:53:00
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]]因此,正如您所看到的,最简单的方法是将两个列表添加在一起,因为即使您使用append()将列表b附加到a,如果没有额外的工作,也不会得到您想要的结果
https://stackoverflow.com/questions/5589549
复制相似问题