0
>>> 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}]

4

2 回答 2

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

于 2013-07-14T12:45:28.127 回答
0

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

于 2013-07-14T12:43:19.393 回答