python两个列表求交、并、差

在python中,如果有两个数组,分别要求交集,并集与差集,怎么实现比较方便呢?
当然最容易想到的是对两个数组做循环,即写两个for循环来实现。这种写法大部分同学应该都会,而且也没有太多的技术含量,下面介绍一些常用的方法。

# -*- encoding:utf-8 -*-


def diff(listA, listB):
    # 交集方法1
    retA = [i for i in listA if i in listB]
    # 交集方法2
    retB = list(set(listA).intersection(set(listB)))
    print '---------交集--------'
    print 'retA:%s' % retA
    print 'retB%s' % retB

    # 并集
    retC = list(set(listA).union(set(listB)))
    print '---------并集--------'
    print 'retC:%s' % retC

    # 差集 方法1 在B中不在A中
    retD = list(set(listB).difference(set(listA)))
    print '---------差集方法1--------'
    print 'retD:%s' % retD

    # 差集 方法2 在B中不在A中
    retE = [i for i in listB if i not in listA]
    print '---------差集方法2-----'
    print 'retE:%s' % retE


if __name__ == '__main__':
    listA = [1, 2, 3, 4, 5]
    listB = [3, 4, 5, 6, 7]
    diff(listA, listB)

结果如下图:

image.png

结合代码来看,大体上是两种思路:
1.使用列表解析式。列表解析式一般来说比循环更快。
2.将list转成set以后,使用set的各种方法去处理。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,888评论 25 709
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,192评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,798评论 19 139
  • 每次回潮州,都必不可少一碗清汤豆芽、肉鲜腩肥的粿条。这种米浆制成的潮汕小吃不同于广州的河粉:形状更细、口感更弹。而...
    吴昱则刚阅读 5,030评论 4 10
  • 今天,奶奶又带回来一个箱子,我好奇地跑过去,问奶奶:“这个是什么东西?”奶奶回答:“你猜?” 会是...
    张轶博阅读 1,625评论 2 3