8

我将两个列表的交集定义如下:

def intersect(a, b):
  return list(set(a) & set(b))

对于三个参数,它看起来像:

def intersect(a, b, c):
  return (list(set(a) & set(b) & set(c))

我可以将此函数推广到可变数量的列表吗?

调用将如下所示:

>> intersect([1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2])
[2]

编辑:Python只能以这种方式实现吗?

intersect([
          [1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]
         ])
[2]
4

2 回答 2

17

使用*-list-to-argument 运算符,而不是使用自定义函数set.intersection

>>> lists = [[1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]]
>>> list(set.intersection(*map(set, lists)))
[2]

如果你想在函数中使用 list-to-set-to-list 逻辑,你可以这样做:

def intersect(lists):
    return list(set.intersection(*map(set, lists)))

如果您希望intersect()接受任意数量的参数而不是单个参数,请改用:

def intersect(*lists):
    return list(set.intersection(*map(set, lists)))
于 2012-06-02T09:37:55.913 回答
0
def intersect(*lists):
    if(len(lists) <=1):
        return lists[0]

    result = lists[0]
    for i in range(1, len(lists)):
        result = set(result) & set(lists[i])

    return list(result)

像这样调用函数...

intersect([1,2],[2,3],[2,4])

把所有的卫生都交给你。

于 2012-06-02T09:50:11.090 回答