zoukankan      html  css  js  c++  java
  • python基础-集合

    集合

    1.创建集合

     

     

    2.集合可存储的类型

     

     

     

     

    3.set的增加

    >>> s=set("abc")

    >>> s.add("111")

    >>> s

    set(['a', 'c', 'b', '111'])

    >>> s.update("qqq")

    >>> s

    set(['a', 'q', 'c', 'b', '111'])    #存进去3个q,会自动去重。

     

    4.集合的删除

    >>> s.remove("a")

    >>> s

    set(['q', 'c', 'b', '111'])

    >>> s.remove("z")

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    KeyError: 'z'    #删除不存在的元素时,会抛出异常

     

    小练习:捕获删除不存在元素时抛出的异常

    #coding = utf-8

    s=set('hello')

    print u"删除前的集合:",s

     

    try:

        s.remove('h')

     

    except KeyError,e:

        print u"集合中不存在该元素"

    except:

        print

    else:

        print u"删除成功"

    小练习:把set中的111替换成xyz->思路:先删除再添加

    >>> s

    set(['q', 'c', 'b', '111'])

    >>> s.remove('111')

    >>> s

    set(['q', 'c', 'b'])

    >>> s.add('xyz')

    >>> s

    set(['c', 'b', 'xyz', 'q'])

     

    利用discard删除集合中的元素,不存在时也不会报异常

    >>> s

    set(['c', 'b', 'xyz', 'q'])

    >>> s.discard("c")

    >>> s

    set(['b', 'xyz', 'q'])

    >>> s

    set(['b', 'xyz', 'q'])

     

    5.遍历集合

      >>> s

    set(['c', 'b', 'xyz', 'q'])

    >>> for i in s:

    ...     print i

    ...

    c

    b

    xyz

    q

    >>>

    >>> s

    set(['c', 'b', 'xyz', 'q'])

    >>> for index,i in enumerate(s):

    ...     print index,i

    ...

    0 c

    1 b

    2 xyz

    3 q

     

     

    6.将集合转换为list,tuple,str

    >>> s

    set(['c', 'b', 'xyz', 'q'])

    >>> list(s)

    ['c', 'b', 'xyz', 'q']

    强制类型转换

     

    也可以遍历set存到list里面去

     

     #set转换成tuple

    >>> tuple(set(s))

    ('q', 'c', 'b', 'xyz')

    #set转换成str

    >>> str(set(s))

    "set(['q', 'c', 'b', 'xyz'])" #直接强转是不行的

    >>> s

    set(['c', 'b', 'xyz', 'q']) #用join可以

    >>> "".join(s)

    'cbxyzq'

    #set不能转成字典

    >>> dict(set(s))

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    ValueError: dictionary update sequence element #0 has length 1; 2 is requ

    拓展:生成字典的一个方法

    >>> zip(['one','two','three'],['1','2','3'])

    [('one', '1'), ('two', '2'), ('three', '3')]

     

    7.pop函数

    >>> s

    set(['a', 'm', '111', 'v', 'z'])

    >>> s

    set(['a', 'm', '111', 'v', 'z'])

    >>> s

    set(['a', 'm', '111', 'v', 'z'])

    >>> s.pop()

    'a'

    >>> s

    set(['m', '111', 'v', 'z'])

    >>> s.pop()

    'm'

    >>> s

    set(['111', 'v', 'z'])

    弹出第一个元素并删除

     

    小练习:删除set中的最后一个元素

    >>> s

    set(['111', 'v', 'z'])

    >>> j=0

    >>> for i in s:

    ...     if j==len(s)-1:

    ...         value=i

    ...     j+=1

    ...

    >>> value

    'z'

    >>> s.remove(value)

    >>> s

    set(['111', 'v'])

     

    同学写的封装起来的:

    def pop_index(s,num):
        '''
            1.删除集合中特定位置的值
            2.位置从1开始
        '''
        if num==0:
            return '位置需要从1开始'
        elif num>len(s):
            return '长度不足,删除错误'
        else:
            for index,x in enumerate(s):
                if num==index+1:
                    value=x 
            s.remove(value)
            return s

    ss=set(['c', 'b', 'e', 'q', 'w', 'hg'])
    print pop_index(ss, 9)

     

    拓展:面试题,关键字驱动

    动作  要操作的对象  操作的值  -> 内部函数的执行

    8. 集合的clear,copylen函数

      >>> s

    set(['sss', 'aat', 's', '111', 'v'])

    >>> s.clear()

    >>> s

    set([])

    >>> s.update('a','b','c','g')

    >>> s2=s.copy()

    >>> s2

    set(['a', 'c', 'b', 'g'])

    >>> id(s)

    40871976L

    >>> id(s2)

    40872424L

    >>> len(s)

    4

    >>> len(s2)

    4

     

    9.集合的交集、并集、和差集

    >>> s2.add('e')

    >>> s2.update('5','6')

    >>> s2

    set(['a', 'c', 'b', 'e', 'g', '5', '6'])

    >>> s

    set(['a', 'c', 'b', 'g'])

    >>> set(s)&set(s2)

    set(['a', 'c', 'b', 'g'])

    >>> s|s2

    set(['a', 'c', 'b', 'e', 'g', '5', '6'])

    >>> s&s2

    set(['a', 'c', 'b', 'g'])

    >>> s-s2

    set([])

    >>> s2-s

    set(['5', 'e', '6'])

    差集是有方向的,比较的是第一个集合比第二个集合中多的元素

     

    也可以用单词直接

    >>> s.intersection(d)
    set(['c', 'd'])
    >>> s.union(d)
    set(['a', 'c', 'b', 'e', 'd', 'f'])

    >>> s.difference(d)
    set(['a', 'b'])

     

     

    10.运算符比较集合间的关系

     本质:计算的是两个集合是否为包含或被包含的关系

     >>> s==s2

    False

    >>> s>s2

    False

    >>> s<s2

    True

    >>> s>=s2

    False

    >>> s<=s2

    True

    >>> s

    set(['a', 'c', 'b', 'g'])

    >>> s2

    set(['a', 'c', 'b', 'e', 'g', '5', '6'])

    >>> s!=s2

    True

     

    >>> s2.issuperset(s)   超集   s2完全包含s
    True

    >>> s.issubset(s2)    子集   s完全包含s2

    True

     

    11.不可变集合

    >>> s3=frozenset('python')

    >>> s3

    frozenset(['h', 'o', 'n', 'p', 't', 'y'])

    >>> type(frozenset)

    <type 'type'>

    >>> type(s3)

    <type 'frozenset'>

    >>> s3.add('a')

    Traceback (most recent call last):

      File "<stdin>", line 1, in <module>

    AttributeError: 'frozenset' object has no attribute 'add' #不可变操作时会报错

     

  • 相关阅读:
    偏态分布的均值与中位数关系
    Leetcode 769. Max Chunks To Make Sorted
    【STL】max_element()函数
    [LeetCode] 1338. Reduce Array Size to The Half
    [LeetCode] 985. Sum of Even Numbers After Queries
    [LeetCode] 984. String Without AAA or BBB
    [LeetCode] 1405. Longest Happy String
    [LeetCode] 1646. Get Maximum in Generated Array
    [LeetCode] 926. Flip String to Monotone Increasing
    [LeetCode] 1658. Minimum Operations to Reduce X to Zero
  • 原文地址:https://www.cnblogs.com/qingqing-919/p/8620360.html
Copyright © 2011-2022 走看看