Python学习记——(8)集合、函数

集合 set

  集合是可变的容器

  集合内的数据对象都是唯一的(不能重复多次的)

  集合是无序的存储结构,集合中的数据没有先后顺序关系

  集合内的元素必须是不可变的对象

  集合是可迭代对象

  集合是相当于只有键没有值的字典(键则是集合的数据)

创建空的集合: set()

创建非空集合: s = {1, 2, 3}

集合的构造(创建)函数 set

  set()  创建一个空的集合对象(不能用{}来创建空集合)

  set(iterable)  用可迭代对象创建一个新的集合

示例:

  s = set()   # 空集合

  s = {1,2,3,4}

  s = set("ABC")  # s = {'A', 'B', 'C'}

  s = set("ABCCBA")  # s = {'A', 'B', 'C'}

  s = set({1:"一", 2:"二", 5:"五"})  # s={1,2,5}

  s = set([1, 2, 3, 2])  # s = {1,2,3}

集合的运算:

  交集, 并集, 补集, 子集,超集,对称补集

   &     |     -     <    >     ^

& 生成两个集合的交集

    s1 = {1, 2, 3}

    s2 = {2, 3, 4}

    s3 = s1 & s2  # s3 = {2, 3}

|  生成两个集合的并集

    s1 = {1, 2, 3}

    s2 = {2, 3, 4}

    s3 = s1 | s2  # s3 = {1, 2, 3, 4}

-  生成两个集合的补集

    s1 = {1, 2, 3}

    s2 = {2, 3, 4}

    s3 = s1 - s2  # s3 = {1} 生成属性s1但不属性 s3的所有元素的集合

    s4 = s2 - s1  # s4 = {4}

^  对称补集

    s1 = {1, 2, 3}

    s2 = {2, 3, 4}

    s3 = s1 ^ s2  # s3 = {1, 4}

> 判断一个集合是另一个集合的超集

< 判断一个集合是另一个集合的子集

   s1 = {4, 5, 6}

   s2 = {4, 5}

   s1 > s2  # True  s1是s2的超集

   s2 < s1  # True  s2是s1的子集

== != 判断集合是否相同

  {1, 2, 3}  == {2, 3, 1}  # True

  {1, 2}  != {3, 4}  # True

<=  >= 判断包含,被包含关系

in / not in 运算符

  in判断一个元素是否存在于集合中(同其它容器类型的in 相同)

not in 与 in相反

集合和字典的优点:in / not in运算符的查找速度快

集合的内建函数操作:len(x), max(x), min(x), sum(x), any(x), all(x)

练习:经理有: 曹操, 刘备, 孙权

  技术员有: 曹操, 孙权, 张飞, 关羽

  用集合求:

    1. 即是经理也是技术员的人有谁?

    2. 是经理, 但不是技术员人的有谁?

    3. 是技术员, 不是经理的都有谁?

    4. 张飞是经理吗?

    5. 身兼一职的人都有谁?

    6. 经理和技术员共有几个人?

python3 中常的集合方法:

方法 意义

S.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加

S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误

S.discard(e) 从集合S中移除一个元素e,在元素e不存在时什么都不做;

S.clear() 清空集合内的所有元素

S.copy() 将集合进行一次浅拷贝

S.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常

S.update(s2) 用 S与s2得到的全集更新变量S

 

S.difference(s2) 用S - s2 运算,返回存在于在S中,但不在s2中的所有元素的集合

S.difference_update(s2) 等同于 S = S - s2

S.intersection(s2) 等同于 S & s2

S.intersection_update(s2) 等同于S = S & s2

S.isdisjoint(s2) 如果S与s2交集为空返回True,非空则返回False

S.issubset(s2) 如果S与s2交集为非空返回True,空则返回False

S.issuperset(...) 如果S为s2的子集返回True,否则返回False

S.symmetric_difference(s2) 返回对称补集,等同于 S ^ s2

S.symmetric_difference_update(s2) 用 S 与 s2 的对称补集更新 S

S.union(s2) 生成 S 与 s2的全集

 

集合是可迭代对象

  用for语句可以得到集合中的全部数据元素

    s = {1, "二", 3.14, "Four"}

    for x in s:

        print(x)

集合推导式:集合推导式是用可迭代对象生成集合的表达式

  语法:

    {表达式 for 变量 in 可迭代对象 [if 真值表达式]}

    注:[] 括起的部分代表可省略

推导式内的 for 子句可以嵌套

练习:

  写一个程序,任意输入一篇英文文章(可能有多行),当输入空行时结束输入

  1. 判断出现英文单词的种类数

     the world

     the dream

     (种类数是3)

固定集合 frozenset

  固定集合是不可变的,无序的,含有唯一元素的集合

  作用:固定集合可以作为字典的键,也可以作为集合的值

  创建空的固定集合:fz = frozenset()

  创建非空的固定集合:frozenset(iterable)  用可迭代对象创建集合

    例:  fz = frozenset([2, 3, 5, 7])

固定集合的运算:同set运算完全一致

   & 交集, | 并集, - 补集, ^ 对称补集,

   > >= < <= == !=

   in , not in

固定集合的方法:相当于集合的全部方法去掉修改集合的方法

前8天的总结:

 数据类型:

  不可变的类型:bool, int, float, complex, str, tuple, frozenset, bytes(后面会讲)

  可变的数据类型:list, dict, set, bytearray(后面会讲)

  值:None, False, True

运算符:

  + - * /  // % **

  >  >=  <  <=  ==  !=

  not  and  or

  in, not in

  & | ^

  +(正号) -(负号)

表达式:

  100

  100 + 200

  len([1,2,3]) + max([1,2,3])  # 函数调用是表达式

  print("hello")

  条件表达式: x if x > y else y

  全部的推导式: [x for x in range(5)]

       (列表,字典,集合推导式三种)

语句 statement

  表达式语句:

     print("hello world")

     'hello'

  赋值语句:

    a = 100

    a = b = c = 200

    x, y, z = 100, 200, 300

  if 语句

  while 语句

  for 语句

  break 语句

  continue 语句

  pass 语句

  del 语句

内建函数:

  len(x)

  max(x)

  min(x)

  sum(x)

  any(x)

  all(x)

构造函数:

  bool(x)

  int(x, base=10)

  float(x)

  complex(real=0, image=0)

  str(x)

  list(x)

  tuple(x)

  dict(x)

  set(x)

  frozenset(x)

数字处理函数:

  abs(x)

  round(x)

  pow(x, y,z=0)

字符串相关函数:

  bin(x)

  oct(x)

  hex(x)

  chr(x)

  ord(x)

迭代器相关:

  range(start, stop, step)

  reversed(x)

  sorted(x)

输入输出相关:

  input(x)

  print(...)

 

函数 function

  什么是函数:函数是可以重复执行的语句块, 可以重复调用

  作用:用于封装语句,提高代码的重用性,用于定义(创建)用户级别的函数

  语法:

    def 函数名(形参列表):

        语句块

  说明:

    1. 函数的名字就是语句块的名称

    2. 函数名的命名规则与变量名相同(函数名必须是标识符)

    3. 函数名是一个变量函数名是一个变量

    4. 函数有自己名字空间,在函数外部不可以访问函数内部的变量,在函数内部可以访问函数外部的变量,要让函数处理外部数据需要用参数给函数传入一些数据

    5. 参数列表可以为空

    6. 语句部分不能为空,如果为空需要用pass语句填充

函数调用:

  函数名(实际调用传递参数)

  说明:

    函数调用是一个表达式

    如果没有return 语句,函数执行完毕后返回None对象

    如果函数需要返回其它的对象需要用到return语句

  示例见:

    mymax.py

练习:用def语句定义一个函数myfun,此函数接收两个实参

    1) 在函数内打印出两个实参的和

    2) 在函数内打印两个实参的最小值

练习:

  1. 已知全班学生的名单,存于集合中names写一个点名签到的程序。随机输出学生的姓名,让用户输入:"y"代表已到,输入"n"或其它代表未到。当点名结束后,打印未到者名单

  2. 写一个函数print_even,传入一个参数n代表终止数.此函数调用将打印 2 4 6 8 ..... n 之间所有的偶数函数定义如下:

      def print_even(n):

           .... 此处自己完成

      # 测试调用:

      print(8)

      # 2 4 6 8

      print(15)

      # 2 4 6 8 10 12 14

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值