zoukankan      html  css  js  c++  java
  • 集合与函数

    目录

    集合set, 固定集合frozenset
    & | - ^ < >
    >= <= == !=
    in not in
    s.add()
    s.remove()
    s.discard()
    s.clear()
    s.pop() 删除随机一个
    ...
    集合是可迭代对象 

    集合推导式
    列表: [x for x in range(10)]
    集合: {x for x in range(10)}
    字典: {x:x**2 for x in range(10)}


    函数 function
    def 语句语法:
    def 函数名(形参列表):
    语句块

    作用:创建函数

    函数调用:
    函数名(实参列表)

    renter 语句

     

    集合 set

    集合是可变的容器
    集合内的数据对象都是唯一的(不能重复多次)
    集合是无序的存储结构, 集合中的数据没有先后关系
    集合内的元素必须是不可变对象
    集合是可迭代对象
    集合是相当于只有键没有值的字典(键则是集合的数据)

    创建空集合
    s = set()
    创建非空集合
    s = {1, 2, 3}
    s = {3.14, True, (1970,1,1), "hello"} 集合里不可加列表,字典,集合(可变)

    >>> s = {1, 2, 3}
    >>> s
    {1, 2, 3}
    >>> type(s)
    <class 'set'>
    >>> l=[6, 8, 10]
    >>> s = {6, 8, 10}
    >>> z = {}
    >>> type(z)
    <class 'dict'>

    >>> s = set()
    >>> type(s)
    <class 'set'>


    集合的构造函数 set
    set()  创建一个空的集合对象(不能用{} 创建集合)
    set(iteerable) 用可迭代对象创建一个新的集合对象
    例:
    s = {1, 3, 5, 7}
    s = set("ABC")
    s = set("ABCCBA")
    >>> s = set("ABCCBA")
    >>> s
    {'A', 'C', 'B'}
    set({1:'1', 2:'2', 5:'5'})
    >>> set({1:'1', 2:'2', 5:'5'})
    {1, 2, 5}
    s = set([1, 0, 3.14, "hello"])
    >>> s = set([1, 0, 3.14, "hello"])
    >>> s
    {0, 1, 3.14, 'hello'}

    s = set(('abc', '123', True))
    >>> s = set(('abc', '123', True))
    >>> s
    {'123', True, 'abc'}

    集合的运算:
    交集   &
    并集   |
    补集   -
    子集   <
    超集   >
    对称补集 ^

    & 生成两个集合的交集
    s1 = {1, 2, 3}
    s2 = {2, 3, 4}
    s3 = s1 & s2 #s3 = {2, 3}

    |  并集    集合 D.update(D2) 将D2合并D, 同取D2的值做新值
    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 #生成输入属于s1 但不属于s2
    >>> s1 = {1, 2, 3}
    >>> s2 = {2, 3, 4}
    >>> s3 = s1 - s2
    >>> s3
    {1}
    >>> s4 = s2 - s1
    >>> s4
    {4}

    ^ 对称补集
    s1 = {1, 2, 3}
    s2 = {2, 3, 4}
    s3 = s1 ^ s2
    #(s1 - s2) | (s2 - s1)
    >>> s1 = {1, 2, 3}
    >>> s2 = {2, 3, 4}
    >>> s3 = s1 ^ s2
    >>> s3
    {1, 4}


    > 判断一个集合是另一个的超集
    < 判断一个集合是另一个的子集
    s1 = {1, 2, 3}
    s2 = {2, 3}
    s1 > s2
    s2 < s1
    >>> s1 = {1, 2, 3}
    >>> s2 = {2, 3}
    s1 > s2
    True #s1 为s2 的超集
    >>> s1 < s2
    False #s2 为 s1 的子集

    == != 集合相同不同
    s1 = {1, 2, 3}
    s2 = {3, 2, 1}
    s1 == s2
    >>> s1 = {1, 2, 3}
    >>> s2 = {3, 2, 1}
    >>> s1 == s2
    True

    in / not in 运算符

    等同于字典的in, not in, 作于集合中, 判断某个值是否存在于集合中

    集合和字典的优点:
    in / not in 运算的判断比列表的速度快

    能用于集合的函数:
    len(x), max(x), min(x), sum(x), any(x), all(x)

    练习:
    经理有:曹操, 刘备, 孙权
    技术员:曹操, 孙权, 张飞, 关羽
    用集合求:
    1)即是经理, 也是技术员的
    2)是经理, 但不是技术员的
    3)是技术员, 不是经理
    4)张飞是经理吗?
    5)身兼一职
    6)经理和技术员共几个

     1 a = {'曹操','刘备','孙权'}
     2 b = {'曹操','孙权','张飞','关羽'}
     3 c = a & b
     4 print('即是经理, 也是技术员的', c)
     5 d = a -b
     6 print('是经理, 但不是技术员的', d)
     7 e = b - a
     8 print('是技术员, 不是经理', e)
     9 f = '张飞'in a
    10 if f == True:
    11     print('张飞是经理')
    12 else:
    13     print('张飞不是经理')
    14 g = a ^ b
    15 print('身兼一职', g)
    16 f = a | b
    17 print('经理和技术员共%d个' % len(f))
    集合查询


    Python3 集合的常用方法
    方法 意义
    S.add(e) 在集合中添加一个新的元素e;如果元素已经存在,则不添加  (列表insert +)
    >>> s = set()
    >>> s
    set()
    >>> s.add(100)
    >>> s
    {100}
    >>> s.add(200)
    >>> s.remove(100)
    >>> s
    {200}

    S.remove(e) 从集合中删除一个元素,如果元素不存在于集合中,则会产生一个KeyError错误
    S.discard(e) 从集合S中移除一个元素e,在元素e不存在时什么都不做;


    S.clear() 清空集合内的所有元素
    S.copy() 将集合进行一次浅拷贝
    S.pop() 从集合S中删除一个随机元素;如果此集合为空,则引发KeyError异常

    >>> s = {2, 1, 4, 7, 8, 9}
    >>> s
    {1, 2, 4, 7, 8, 9}
    >>> s.pop()
    1
    >>> s.pop()
    2
    >>> s.pop()
    4
    >>> s.pop()
    7
    >>> s.pop()
    8
    >>> s.pop()
    9
    >>> s.pop()
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    KeyError: 'pop from an empty set'


    S.update(s2) 用 S与s2得到的全集更新变量S (+=)
    >>> s = {1, 2, 3}
    >>> s
    {1, 2, 3}
    >>> s2 = {2, 3, 4}
    >>> s = s | s2 #s.update(s2) #s |=s2
    >>> s
    {1, 2, 3, 4}

    >>> s = {1, 2, 3}
    >>> s2 = {2, 3, 4}
    >>> s |= s2
    >>> s
    {1, 2, 3, 4}


    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的全集

    python 只有三种推导式 字典{:}列表[]集合{}
    集合推导式
    集合推导式是用可迭代对象生成集合的表达式
    语法:
    {表达式 for 变量 in 可迭代对象 [if 真值表达式]}
    注:[]可略
    例:
    l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5] #字典有:
    s = {x for x in l}

    >>> l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5]
    >>> s = {x for x in l}
    >>> s
    {1, 2, 3, 4, 5, 6, 7, 8}
    >>> d = { x: x for x in l}#字典
    >>> d
    {1: 1, 2: 2, 3: 3, 4: 4, 5: 5, 6: 6, 7: 7, 8: 8}


    推导式嵌套:
    语法同列表同

    >>> l =[1, 3, 5, 7, 2, 4, 6, 8, 1, 3, 5]
    >>> s = {x for x in l if x % 2==0}
    >>> s
    {8, 2, 4, 6}


    练习:
    任意输入一些数字, 存于列表L中, 当输入负数时结束输入
    1)打印和
    2)打印这些数有多少种(去重)
    3)去重后, 打印这些剩余数字的和

     1 l = []
     2 while True:
     3     a = int(input("请输入数字:")
     4         if a < 0:
     5             break
     6         else:
     7             l.append(a)
     8 print(l)
     9 print('这些数的和:', sum(l))
    10 s = set(l)
    11 print('这些数有%d种' % len(s))
    12 he = sum(s)
    13 print('去重后, 打印这些剩余数字的和%d' % he)
    数字计算

    固定集合frozenset

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

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

    固定集合的构造函数:
    frozenset() 创建一个空的固定集合
    frozenset(iterable) 可用迭代对象创建固定集合

    >>> s = {1, 2, 3, frozenset({4.4, 5.5})}
    >>> s
    {1, 2, 3, frozenset({4.4, 5.5})}

    >>> fz = frozenset()
    >>> type(fz)
    <class 'frozenset'>

    >>> fz = frozenset({1, 3, 5, 7})
    >>> s = {1, 3, 5, 7}
    >>> s
    {1, 3, 5, 7}
    >>> fz
    frozenset({1, 3, 5, 7})


    运算:
    交集   &
    并集   |
    补集   -
    对称补集^
    < <= > >= == !=
    in /not in
    (以上运算符和集合set 同)


    固定集合的方法:
    相当于集合的全部方法去掉添加, 删除(修改)集合的
    方法

    总结:
    1.数据类型:
      数值类型:(不可变的类型)
       bool,int,float,complex,
    容器:
      不可变容器
          str,tuple,frozenset,bytes
      可变容器:
        list,dict,set,bytearray
    2.值:
       None,False,True
     
    运算符:
       算术运算符:
          + - * / // % **
       比较运算符:
          > >= < <= == !=
       in , not in
    is , is not
       布尔运算:
        not , and , or
    +(正号) -(负号)
    & | ^
    [ ] (索引,切片,键索引)

    表达式:
    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")
    1 + 2
    赋值语句:创建和修改变量
    a=100
    a=b=c=200
    x,y,z=100,200,300
    a[0] = 100
    dict['name'] = 'tarena'
    del 语句
      if 语句
      while 语句
    for 语句
    break 语句
    continue 语句
    pass 语句

    内建函数:
      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=None)
    字符串相关函数:
      bin(x)
      oct(x)
      hex(x)
      chr(x)
      ord(x)

    迭代器相关
      range(start,stop,step)
      reversed(x)
      sorted(x)

    输入输出相关:
      input(x)
      print(...)

    bin(x), oct(x), hex(x)
    chr(x), ord(x)
    range(star, stop, step)
    input(x), print(x), id(x)

    >>> help(__builtins__)

    函数function

    函数名(实参...)
    函数是可以重复执行的语句块, 可以重复调用
    作用:
    1.用于封装语句块, 提高代码的重用性
    2.定义用户级别的函数


    语法:
    def 函数名(形参列表):
    语句块


    说明:
    1.函数的名字就是语句块的名称
    2.函数名的命名规则写变量名相同(函数名必须是标识符)
    3.函数名是一个变量(不要轻易对其赋值)
    4.函数有自己名字空间,在函数外部不可以访问函数内部的变量,在函数内 部可以访问函数外部的变量,但不能修改此变量.
       (要让函数处理外部数据需要用参数给函数传入一些数据)
    5.函数如果不需要传入参数,参数列表可以为空
    6.语句部分不能为空,如果为空需要用pass语句填充

    函数调用:
      函数名(实际调用传递参数/实参)
        注:实际调用传递参数,以后简称实参

      函数名说明:
        1.函数调用是一个表达式
        2.如果函数内部没有return语句,函数调用完毕后返回None对象
        3.如果函数需要返回其他的对象需要用到return语句


    函数的调用
    函数名(实际调用传递参数)
    注:
    实际调用传递参数, 简称实参

    1 def say_hello():
    2     print('hello world!')
    3     print('hello tarena!')
    4     print('hello everyone!')
    5 
    6 say_hello() # 调用函数   
    7 say_hello()
    8 say_hello()
    函数的调用
     1 # 此示例示意带有形式参数的函数的定义
     2 
     3 # 写一个函数,打印出给定的两个数的最大值
     4 def mymax(a,b):
     5     print('a =', a)
     6     print('b =', b)
     7     if a > b:
     8         print(a, '最大')
     9     else:
    10         print(b, '最大')
    11 
    12 mymax(100,200)
    13 mymax(10,20)
    14 mymax('ABC','123')
    形式参数的函数的定义
    1 #    写一个函数myadd,此函数中的额参数列表里有两个参数x,y
    2 #    此函数的功能是打印x+y的和
    3 def myadd(x,y):
    4     print(x + y)
    5 
    6 myadd(100,200)  # 300
    7 print('ABC','123')  # ABC123
    8 myadd('ABC','123')
    Myadd函数
     1 # 写一个函数mysum,传入一个参数x代表终止整数
     2 # 打印出 1+2+3+4+...+x的和
     3 
     4 def mysum(x):
     5     i = 1
     6     s = 0 # 创建变量用于累加
     7     while i <= x: # for x in range(1,x+1):
     8         s += i
     9         i += 1
    10     print(s)
    11 
    12 mysum(100) # 5050
    13 mysum(4)  # 10
    Mysum函数


    return 语句:
    语法:
      return [表达式]
      注: [] 代表内容可省略
    作用:
      用于函数中,结束当前的函数的执行,返回到调用该函数的地方,同时返回  (表达式)一个对象的引用关系


    return 语句说明:
      1.return 语句后跟的表达式可以省略,省略后相当于return None
      2.如果函数内没有return语句,则函数执行完最后一条语句后返回None    (相当于在最后加了一条 return None 语句)

     1 def say_hello():
     2     print('aaaaaa')
     3     print('bbbbbb')
     4     return None # 返回到调用此函数的地方
     5     print('cccccc')
     6 
     7 say_hello()
     8 say_hello()
     9 print("-------------------------")
    10 def say_hello():
    11     print('aaaaaa')
    12     print('bbbbbb')
    13     return [1,2,3,4] # 返回到调用此函数的地方
    14     print('cccccc')
    15 
    16 v = say_hello()
    17 print('v =',v)
    hello函数

    函数的参数传递
      传递方式:
        位置传参
          序列传参
        关键字传参
          字典关键字传参

    练习

     1 # 1.写一个函数 mymax,给函数传递两个参数,返回两个实参中最大的一个
     2 def mymax(a,b):
     3     if a > b:
     4         # zuida = a
     5         return a
     6     else:
     7         # zuida = b 
     8         return b
     9     # return zuida
    10 
    11 v = mymax(100,200)
    12 print('v =',v)  # v = 200
    13 print(mymax('ABC','abc'))  #abc
    Mymax
    1 def mymax(a,b):
    2     if a > b:
    3         return a
    4     return b
    5 
    6 v = mymax(100,200)
    7 print('v =',v)  # v = 200
    8 print(mymax('ABC','abc')) 
    Mymax2
    1 def mymax(a,b):
    2     return max(a,b)
    3 
    4 v = mymax(100,200)
    5 print('v =',v)  # v = 200
    6 print(mymax('ABC','abc')) 
    Mymax3

    写一个函数 input_number ,此函数用来获取用户循环输入的整数
    ,当用户输入负数时结束输入.将用户输入的数字以列表的形式返回,再用
    内建函数 max,min,sum 取出用户输入的最大值,最小值及和

     1 def input_number():
     2     lst = []
     3     while True:
     4         n = int(input("输入整数"))
     5         if n < 0:
     6             break
     7         lst.append(n)
     8     return lst
     9 
    10 L= input_number()
    11 print(L) # 打印此列表
    12 print("用户输入的最大数是:",max(L))
    13 print("用户输入的最小数是:",min(L))
    14 print("用户输入的数的和是:",sum(L))
    input_number

    写一个函数 print_odd,打印从begin开始,到end结束(不包含end)内的全部奇数

    1 def print_odd(begin,end):
    2     l = []
    3     for i in range(begin,end):
    4         if i % 2 == 1:
    5             l.append(i)
    6     print(l)
    7     
    8 print_odd(1,10)  # 打印 1,3,5,7,9
    9 print_odd(10,20) # 打印 11,13,15,17,19
    print_odd

    定义两个函数:
    sum3(a,b,c)用于'返回'三个数的和
    pow3(x)用于'返回'x的三次方
    用以上函数计算:
     1)计算1的立方+2的立方+3的立方的和
     2)计算 1+2+3 的和的立方 
       即:(1+2+3) **3 的和

     1 def sum3(a, b, c):
     2     return(a + b + c)
     3 
     4 # sum3(1, 2, 3)
     5 
     6 def pow3(x):
     7     return(x**3)
     8  
     9 print(sum3(pow3(1), pow3(2), pow3(3)))
    10 print(pow3(sum3(1, 2, 3)))
    sum3

    改写之前的学生信息管理程序
        改写两个函数
       1)写一个函数 input_student()  用于返回学生信息的字典的列表
         (以前格式一样)
       2)写一个函数 output_stedent() 此函数传入一个列表lst ,
         即字典的列表   
          此函数把lst 的内容以及表格形式打印出来

     1 def input_student():
     2 
     3 
     4 def output_student(lst):
     5 
     6 
     7 L = input_student() # 获取学生信息的列表
     8 output_student(L)  # 把L 以列表的形式打印
     9 
    10 
    11 def input_student():
    12     l = []
    13     while True:
    14         name = input('请输入姓名:')
    15         if not name:#如果名字为空, 结束
    16             break
    17         age = input("请输入年龄:")
    18         score = input('请输入成绩:')
    19         d = {}
    20         d['name'] = name
    21         d['age'] = int(age) if age != "" else "death"
    22         d['score'] = int(score) if score != "" else ""
    23         l.append(d)
    24     return(l)
    25 
    26 
    27 
    28 def output_student(lst):
    29     print('+--------------------+--------------+-------------+')
    30     print('|      name          |     age      |     score   |')
    31     print('+--------------------+--------------+-------------+')
    32     for d in lst:
    33         n = d["name"].center(20)
    34         a = str(d['age']).center(14)
    35         s = str(d['score']).center(13)#'-'的数量
    36         print("|%s|%s|%s|" % (n, a, s))
    37         print('+--------------------+--------------+-------------+')
    38 
    39 #     |   xiaozhang        |     20       |    100      |
    40 #     |     xiaoli         |     18       |     98      |
    41 #     +--------------------+--------------+-------------+
    42 
    43 l = input_student()
    44 output_student(l)
    学生信息管理系统2.0
  • 相关阅读:
    Git远程库版本回滚
    微软Connect(); 2017大会梳理:Azure、数据、AI开发工具
    【实验手册】使用Visual Studio Code 开发.NET Core应用程序
    Ocelot API网关的实现剖析
    微软Tech Summit 2017,等你来打Call
    “.Net 社区大会”(dotnetConf) 2017 Day 1 Keynote: .NET Everywhere
    .NET平台微服务项目汇集
    .Net Core下通过Proxy 模式 使用 WCF
    .NET Core 2.0 正式发布信息汇总
    Visual Studio 2017 : client version 1.22 is too old
  • 原文地址:https://www.cnblogs.com/Alan-Song/p/9653325.html
Copyright © 2011-2022 走看看