python,集合

发布时间:2019-08-31 09:44:53编辑:auto阅读(1449)


    ************************集合***********************

    总结
    可变数据类型: 列表, 字典, 集合
    不可变数据类型: 数值类型, 字符串, 元组

    - 可变数据类型实现某个功能, 直接改变可变的数据类型;
    - 不可变数据类型实现某个功能,需要将结果赋值给另外一个变量;
    是否实现for循环
    可迭代数据类型: str, list, tuple, dict, set
    不可迭代数据类型:数值类型
    是否支持索引,切片, 重复和连接特性
    有序的数据类型: str, list, tuple
    无序的数据类型: dict, set


    集合set的定义
    集合是一个无序的,不重复的数据组合。

    若花括号里面是空,是字典型
    In [2]: type(set)
    Out[2]: dict

    In [1]: set = {}

    *)集合的定义
    1.

    In [16]: set = {1,2,3,1,2,3}

    In [17]: set = {1,2,3,'hello',(1,2,3)}

    In [18]: type(set)
    Out[18]: set



    2.工厂法
    工厂法定义集合时,括号里是可迭代对象,eg:数值类型不可以;

    In [7]: lh = set()  定义空列表


    *)set的应用场景
    集合是一个无序的,不重复的数据组合。

    • 列表去重
    去重法一:
    -转换为集合数据类型;set(列表)

    >>> list = [1,2,2,3,4,3,4,5]
    >>> s = set(list)
    >>> print s
    set([1, 2, 3, 4, 5])

    Screenshot from 2018-01-08 13-19-18.png


    去重法二:
    -字典法;


    In [3]: list = [1,2,3,4,3,2,1,2]

    In [4]: dict = {}.fromkeys(list)

    In [5]: print dict
    {1: None, 2: None, 3: None, 4: None}


    *)集合的特性
    -集合是无序的,不重复的数据类型
    -因此不支持索引,不支持切片,不支持重复,不支持连接;
    -支持成员操作符;
    -支持for循环;

    Screenshot from 2018-01-08 13-34-29.png


    Screenshot from 2018-01-08 13-36-04.png


    *)集合的增删改查


    ***集合的增加

    In [12]: set.add(5)  #add增加


    Screenshot from 2018-01-08 13-32-52.png

    In [24]: set.update([5,6]) #update增加


    Screenshot from 2018-01-08 13-38-57.png

    ***集合的删除

    s.remove()
    删除集合中指定的元素,如果不存在,则报错

    • s.pop()
    随机删除集合中的某个元素,并返回删除的元素

    set.discard()
    删除集合指定元素,如果不存在,do nothing;

    set.clear()
    清空集合元素



    Screenshot from 2018-01-08 13-41-16.png


    Screenshot from 2018-01-08 13-45-42.png

    *)集合的其他操作

    显示集合set的长度
    In [14]: s
    Out[14]: {2, 3, 'cd', 'ef'}

    In [15]: len(s)
    Out[15]: 4

    Screenshot from 2018-01-08 19-59-48.png

    s.copy()
    In [6]: set = {1,2,3,'a','b'}
    集合的浅拷贝
    In [7]: set.copy()
    Out[7]: {1, 2, 3, 'a', 'b'}

    • 关系测试:如交集、差集、并集的关系测试

     s1 & s2  #并集

    s1.intersection(s2) #并集

    s1 | s2   #交集

    s1.union(s2)  #交集

    s1 - s2  #1与2的差集

    s2 - s1   #2与1的差集

    s1 ^ s2  #对等差分


    Screenshot from 2018-01-08 20-08-00.png


    Screenshot from 2018-01-08 20-12-42.png


    In [27]: s1.issuperset(s2) #1是2的父集

    In [28]: s2.issubset(s1)  #2是1的子集

    Screenshot from 2018-01-08 20-15-37.png

    In [29]: s1.isdisjoint(s2)



    应用:
    (华为机试题)题目描述
    明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性, 他先用计算机生成了N个1到1000
    之间的随机整数(N≤1000), N是用户输入的,对于 其中重复的数字,只保留一个,把其余相同的数去
    掉,不同的数对应 着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺 序去找同学做调
    查。请你协助明明完成“去重”与“排序”的工作;
    提示:
    生成随机数,
    import random
    random.randint(1,1000)
    列表的去重


    Screenshot from 2018-01-08 20-45-12.png




    Screenshot from 2018-01-08 20-45-28.png




    1. 题目描述
      现在IPV4下用一个32位无符号整数来表示,一般用点分方式来显示,点将IP地址分成4个部分,每个部分为8位,表示成一个无符号整数(因此不需要用正号出现),如10.137.17.1,是我们非常熟悉的IP地址,一个IP地址串中没有空格出现(因为要表示成一个32数字)。
      现在需要你用程序来判断IP是否合法。

      输入描述:输入一个ip地址
      输出描述:返回判断的结果YES or NO


      示例1
      输入: 10.138.15.1
      输出: YES


      #!/usr/bin/env python
      #coding:utf-8
      ip = raw_input('输入一个ip:')
      ip1 = ip.split('.')
      if len(ip1)!=4:
          print "NO"
      else:
          for i in ip1:
            if not 0<=int(i)<=255:
                print "NO"
                break
          else:
            print "YES"





关键字