zoukankan      html  css  js  c++  java
  • python中如何对list之间求交集,并集和差集

    最近遇到一个从list a里面去除list b的元素的问题,由于a很大,b也不小。所以遇到点困难,现在mark一下。

    先说最简单的方法:

    1 a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    2 b = [2, 5, 8, 11, 0]
    3 # intersection
    4 intersection = [v for v in a if v in b]
    5 # union
    6 union = b.extend([v for v in a])
    7 # difference
    8 difference = [v for v in a if v not in b]

    这种方法就是逻辑->代码,没有深层次的考虑。当然这里所有的代码没有用到for loop,也没有使用list的append和remove方法,因为这样写很pythonic,效率上来看个人感觉比append和remove的使用应该也会高。但是这种方法是不加思考的。其实计算两个list的交并补之类的操作,其实是集合间的操作,如果list里面有重复元素再进行这样的操作其实没有什么意义。所以从集合的操作角度来讲,交并补可以借鉴bitset的处理方法。当list的长度很大的时候,效率会高出很多倍。

    高效率的方法:

    1 # intersection
    2 intersection = list(set(a).intersection(set(b)))
    3 # union
    4 union = list(set(a).union(set(b)))
    5 # difference
    6 difference = list(set(a).difference(set(b)))
  • 相关阅读:
    数值拓展与函数拓展
    正则小记
    Struts2(三)配置详解
    Struts2(二)工作原理
    Struts2(一)基本配置
    Eclipse新建动态web工程项目出现红叉解决方案
    Spring系列之AOP
    Java动态代理的实现机制
    Spring系列之装配Bean
    Spring系列之基本配置
  • 原文地址:https://www.cnblogs.com/chen-kh/p/7137565.html
Copyright © 2011-2022 走看看