首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可变数目列表的交集

可变数目列表的交集
EN

Stack Overflow用户
提问于 2012-06-02 17:34:39
回答 2查看 4.3K关注 0票数 8

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

代码语言:javascript
复制
def intersect(a, b):
  return list(set(a) & set(b))

对于三个参数,它将如下所示:

代码语言:javascript
复制
def intersect(a, b, c):
  return (list(set(a) & set(b) & set(c))

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

例如,该调用如下所示:

代码语言:javascript
复制
>> intersect([1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2])
[2]

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

代码语言:javascript
复制
intersect([
          [1, 2, 2], [2, 3, 2], [2, 5, 2], [2, 7, 2]
         ])
[2]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-02 17:37:56

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

代码语言:javascript
复制
>>> 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逻辑,你可以这样做:

代码语言:javascript
复制
def intersect(lists):
    return list(set.intersection(*map(set, lists)))

如果您更喜欢intersect()接受任意数量的参数,而不是单个参数,请使用以下代码:

代码语言:javascript
复制
def intersect(*lists):
    return list(set.intersection(*map(set, lists)))
票数 17
EN

Stack Overflow用户

发布于 2012-06-02 17:50:11

代码语言:javascript
复制
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)

像这样调用函数...

代码语言:javascript
复制
intersect([1,2],[2,3],[2,4])

把所有的卫生都留给你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10861236

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档