Python设置和interesction

Doo*_*Dah 2 python

我使用的是Python 2.5.4.从这里:Python - 多个列表的交叉?

我有这个:

def intersect(*d):
    sets = iter(map(set, d))
    result = sets.next()
    for s in sets:
        result = result.intersection(s)
    return result
Run Code Online (Sandbox Code Playgroud)

以下按预期工作:

intersect([1,2,3,4], [2,3,4], [3,4,5,6,7])
Run Code Online (Sandbox Code Playgroud)

但是,我有一些看起来更像是以下内容:

d=[ [1,2,3,4], [2,3,4], [3,4,5,6,7] ]
Run Code Online (Sandbox Code Playgroud)

如果我称之为:

intersect(d)
Run Code Online (Sandbox Code Playgroud)

我明白了:

TypeError: list objects are unhashable
Run Code Online (Sandbox Code Playgroud)

如何将d上述内容转化为intersect()可以采取的措施?

Mar*_*ers 10

您需要将列表的内容作为单独的参数传递:

intersect(*d)
Run Code Online (Sandbox Code Playgroud)

否则会发生整个列表被用作一个集合.该*d语法指示要使用Python d作为参数传递给函数的序列,而不是使用完整d列表,只有一个参数.