zoukankan      html  css  js  c++  java
  • python两个 list 交集,并集,差集的方法+两个tuple比较操作+两个set的交集,并集,差集操作+两个dict的比较操作

    转自:http://blog.chinaunix.net/uid-200142-id-3992553.html

    有时候,为了需求,需要统计两个 list 之间的交集,并集,差集。查询了一些资料,现在总结在下面:
    1. 获取两个list 的交集
    print list(set(a).intersection(set(b)))

    2. 获取两个list 的并集
    1. print list(set(a).union(set(b)))
    3. 获取两个 list 的差集
    1. print list(set(b).difference(set(a))) # b中有而a中没有的
    >>> r=[1,2,3,4,5]
    >>> m=[2,4]
    >>> list(set(r).intersection(set(m)))
    [2, 4]
    >>> a=[1,2,3,4,5]
    >>> b=[2,4,6,8]
    >>> list(set(r).intersection(set(m)))
    [2, 4]
    >>> list(set(a).union(set(b)))
    [1, 2, 3, 4, 5, 6, 8]
    >>> list(set(b).difference(set(a)))  # b中有而a中没有的
    [8, 6]
    >>> list(set(a).difference(set(b)))  # a中有而b中没有的
    [1, 3, 5]
    >>> a=[3,4,2,5,1]
    >>> list(set(r).intersection(set(m)))
    [2, 4]
    >>> list(set(a).union(set(b)))
    [1, 2, 3, 4, 5, 6, 8]
    >>> list(set(b).difference(set(a)))  # b中有而a中没有的
    [8, 6]
    >>> list(set(a).difference(set(b)))  # a中有而b中没有的
    [1, 3, 5]
    >>> #两个list比较的话,利用了set的属性,对各自元素的顺序无关,但是会过滤掉相同的元素

    set操作:

    >>> a=set(a)
    >>> a
    set([1, 2, 3, 4, 5])
    >>> b=set(b)
    >>> b
    set([8, 2, 4, 6])
    >>> a | b  #求并集
    set([1, 2, 3, 4, 5, 6, 8])
    >>> a - b #求差集,a中有而b中无
    set([1, 3, 5])
    >>> b - a  #求差集,b中有而a中没有的
    set([8, 6])
    >>> a & b #求交集
    set([2, 4])
    >>> a in b
    False
    >>> a not in b
    True
    >>> a==b
    False
    >>> a!=b
    True
    >>> len(a)
    5
    >>> a=set([1, 4, 3, 2, 5])
    >>> a
    set([1, 2, 3, 4, 5])
    >>> a - b #求差集,a中有而b中无
    set([1, 3, 5])
    >>> #两个set比较,对各自元素的顺序无关,但是会过滤掉重复的元素
    >>> 

    tuple操作:

    >>> atuple
    (1, 2, 3, 'd', 2, 3, 'n', 'd')
    >>> btuple
    (2, 3, 'n', 'd')
    >>> cmp(btuple,btuple)
    0
    >>> tupleb=(2, 3, 'd', 'n')
    >>> cmp(btuple,tupleb)
    1
    >>> cmp(tupleb,btuple)
    -1
    >>> #tuple比较与元素的顺序有关
    >>> abtuple=atuple+btuple  #组合
    >>> abtuple
    (1, 2, 3, 'd', 2, 3, 'n', 'd', 2, 3, 'n', 'd')
    >>> aatuple=atuple*2  #复制
    >>> aatuple
    (1, 2, 3, 'd', 2, 3, 'n', 'd', 1, 2, 3, 'd', 2, 3, 'n', 'd')
    >>> aatuple
    (1, 2, 3, 'd', 2, 3, 'n', 'd', 1, 2, 3, 'd', 2, 3, 'n', 'd')
    >>> 

    dict操作:

    >>> adict={'id':1,'name':'lucy','age':23,'birth':'20160909'}
    >>> bdict={'name':'lucy','id':1,'age':23,'birth':'20160909'}
    >>> adict
    {'age': 23, 'id': 1, 'birth': '20160909', 'name': 'lucy'}
    >>> bdict
    {'age': 23, 'name': 'lucy', 'birth': '20160909', 'id': 1}
    >>> adict.keys()
    ['age', 'id', 'birth', 'name']
    >>> bdict.keys()
    ['age', 'name', 'birth', 'id']
    TypeError: unsupported operand type(s) for &: 'list' and 'list'
    >>> adict.items()
    [('age', 23), ('id', 1), ('birth', '20160909'), ('name', 'lucy')]
    >>> bdict.items()
    [('age', 23), ('name', 'lucy'), ('birth', '20160909'), ('id', 1)]
    >>> adict.update(bdict)
    >>> adict
    {'name': 'lucy', 'age': 23, 'birth': '20160909', 'id': 1}
    >>> abdict=adict.items()+bdict.items()#组合
    >>> abdict
    [('name', 'lucy'), ('age', 23), ('birth', '20160909'), ('id', 1), ('age', 23), ('name', 'lucy'), ('birth', '20160909'), ('id', 1)]
    >>> abdict=dict(abdict) #转换为字典后去除了重复的键
    >>> abdict
    {'age': 23, 'name': 'lucy', 'birth': '20160909', 'id': 1}
    >>> cdict={'name': 'kate', 'age': 23, 'birth': '20160909', 'id': 2}
    >>> acdict=adict.items()+cdict.items()
    >>> acdict
    [('name', 'lucy'), ('age', 23), ('birth', '20160909'), ('id', 1), ('age', 23), ('name', 'kate'), ('birth', '20160909'), ('id', 2)]
    >>> acdict=dict(acdict) #转换为字典后去除了重复的键,对于相同的键,选择最后合并进来的元素
    >>> acdict
    {'age': 23, 'name': 'kate', 'birth': '20160909', 'id': 2}
    >>>
  • 相关阅读:
    The Princess and the Pea,摘自iOS应用Snow White and more stories
    Android笔记之自定义的RadioGroup、RadioButton,以及View实例状态的保存与恢复
    Android笔记之获取debug.keystore和release.keystore的MD5/SHA1值
    Android笔记之WebView加载网页的进度回调
    Android Studio停留在“Indexing paused due to batch update”的解决方案
    【Python初级】StringIO和BytesIO读写操作的小思考
    【Python初级】由判定回文数想到的,关于深浅复制,以及字符串反转的问题
    【Python初级】由生成杨辉三角代码所思考的一些问题
    【面试总结-编程】多行两列数据,实现同key的value求和并输出
    【算法与数据结构实战】模拟竖式加法,自定义位数
  • 原文地址:https://www.cnblogs.com/apple2016/p/5753923.html
Copyright © 2011-2022 走看看