2013-07-14 35 views
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}]python更新集中的意外输出

+0

因为更新类型为无 – gefei

+0

也许你可以使用'OrderedDict'。所以你可以避免保留一个键列表。 – zhangyangyu

回答

0

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

+2

为什么downvote?说明。这是第一个答案,我确定它是正确的。 – sashkello

+0

也许是因为你没有提供任何解决方案... OP写了他所期望的。 – tamasgal

+0

“为什么该代码段会生成[无,无]作为输出?”是个问题。我没有提供解决方案,因为其他人首先做了它,我不想复制它... – sashkello

2

.update()编辑设置到位。它返回正在更新的设置。事实上,它不返回任何东西。一个不返回任何东西的函数默认返回None。在这里,你最好使用一个正常的循环:

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