python中更新集的意外输出

时间:2013-07-14 12:42:21

标签: python python-3.x

>>> inverseIndex={'p':{1,2,3},'a':{2,3,4},'v':{5,6,7}}
>>> query={'p','a','v'}
>>> s=[inverseIndex[s] for s in query]
>>> s
[{2, 3, 4}, {1, 2, 3}, {5, 6, 7}]
>>> [ s[len(s)-1].update(s[i]) for i in range(len(s)-1) ]
[None, None]

为什么代码段会产生[None,None]作为输出? 我期待[{2, 3, 4}, {1, 2, 3}, {1,2,3,4,5,6,7}]

2 个答案:

答案 0 :(得分:2)

.update()编辑了该套装。它返回正在更新的集合。事实上,它不会返回任何。不返回任何内容的函数默认返回None。在这里,你最好使用正常的for循环:

for i in range(len(s)-1):
    s[len(s)-1].update(s[i])

此外,您可以将for循环缩小到:

>>> for i in s[:-1]: 
...     s[-1].update(i)
... 
>>> s
[set([2, 3, 4]), set([1, 2, 3]), set([1, 2, 3, 4, 5, 6, 7])]

首先对列表进行切片,以便遍历每个元素,但最后一个元素。然后,我们用列表中的每个其他集更新最后一个。整个语法称为Python Slice Notation

答案 1 :(得分:0)

update返回None(Python的无效函数方式,没有ruturn值)。因此,列表中的值都是None。