(八)python集合,总结,函数

目录

集合set

    集合的运算:

    集合推导式:

    固定集合frozenset

前8天的总结:

函数function


集合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  #生成属于s1 但不属于s2 的所有元素的集合

        ^ 对称补集
            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的超集
            s1 < s2 # True  s2是s1的超集

        == != 判断集合是否相同
            {1,2,3} =={2,3,1}  # True
            {1,2} != {3,4}  # True

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

    in / not in运算符
            判断一个元素是否存在与集合中(同其他容器类型的in相同)

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

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

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

manager = {"曹操", "刘备", "孙权"}
techs = {"曹操", "孙权", "张飞", "关羽"}
# 1. 即是经理也是技术员的人有谁?
print("即是经理也是技术员的人有", manager & techs)
# 2. 是经理, 但不是技术员人的有谁?
print("是经理, 但不是技术员人的有", manager - techs)
# 3. 是技术员, 不是经理的都有谁?
print("是技术员, 不是经理的都有", techs - manager)
# 4. 张飞是经理吗?
zf = '张飞'
if '张飞' in manager:
    print(zf, "是经理")
else:
    print(zf, "不是经理")
# 5. 身兼一职的人都有谁?
print("身兼一职的人都有", manager ^ techs)
# 6. 经理和技术员共有几个人?
print("经理和技术员共有%d个人" % len(manager | techs))

    集合是可迭代对象
        用for语句可以得到集合中的全部数据元素
        s = {1,"二",3.14,"Four"}
             for x in s :
                 print(x)

    集合推导式:

        集合推到式是用可迭代对象生成集合的表达式
        语法:
            {表达式for 变量in 可迭代对象[if 真值表达式]}
            注:[] 括起来的部分代表可省略
            推导式内的for 子句可以嵌套

练习:
    写一个程序,任意输入一篇英文文章(可能有多行),
    当输入空行时结束输入
    1.判断出现英文单词的种类数
        the world
         the dream
         (种类数是3)

L = []
while True:
    s = input("请输入: ")
    if not s:
        break
    L.append(s)

print("您输入了%d行文字" % len(L))
L2 = []
for s in L:
    for ch in "0123456789’():“”–.,":
        s = s.replace(ch, ' ')
    print("====> : ", s)
    L2.append(s)

print(L2)
words_set = set()  # 创建一个空集合,把所有词放进去
for s in L2:
    words = s.split()  # 把字符串分拆成字符串列表
    for w in words:
        words_set.add(w)  # 把所有单位加到集合内

print("单词个数:", len(words_set))
print(words_set)

    固定集合frozenset

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

        作用:
             固定集合可以作为字典的键,也可以作为集合的值
        创建空的固定集合:
             fz = frozenset()
         创建非空的固定集合:
             frozenset(iterable) 用可迭代对象创建集合
        例: fz = frozenset([2,3,5,7])

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

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


前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(...)
    详见:
    >>> help(_builtins_)

函数function

    什么是函数:
        函数是可以重复执行的语句块,可以重复调用
    作用:
        用于封装语句,提高代码的重用性
        用于定义(创建)用户级别的函数
    语法:
        def 函数名(形参列表):
        语句块
    说明:
        1.函数的名字就是语句块的名称
        2.函数名的命名规则与变量名相同(函数名必须是标示符)
        3.函数名是一个变量
        4.函数有自己的名字空间,在函数外部不可以访问函数内部的变量,
        在函数内部可以访问函数外部的变量,要让函数处理外部数据需要用参数给函数传入一些数据
        5.参数列表可以为空
        6.语句部分不能为空,如果为空需要用pass语句填充

def say_hello():
    print("hello world!")
    print("hello tarena!")
    print("hello overyone!")

# 调用函数:
say_hello()
say_hello()
say_hello()

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

        说明:
            函数调用是一个表达式
            如果没有return语句,函数执行完毕后返回None对象
            如果函数需要返回其他的对象需要用到return语句

# 此示例示意函数的传参:
# 此函数用于打印调用者传给我们的实参的最大一个
def mymax(a, b):
    # print("用户传给我的第一个参数a是", a)
    # print("b =", b)
    if a > b:
        print("最大的是: ", a)
    else:
        print("最大的是:", b)

# 调用mymax
mymax(100, 200)
mymax(5, 3)


练习:
    用def语句定义一个函数,此函数接收两个实参,
    1)在函数内打印出两个实参的和
    2)在函数内打印出两个实参的最小值

def myfun(a,b):
    print(a + b)
    if a < b :
        print(a)    
    else:
        print(b)

myfun(100,250)


练习:
1.已知全班学生的名单,存于集合中names,写一个点名签到的程序。
    随机输出学生的姓名,让用户输入:"y"代表已到,输入"n"或其他代表未到
    当点名结束后,打印未到者名单
2.写一个函数print_even,传入一个参数n代表终止数.此函数调用将打印2468...n
    之间的所有的偶数
    函数定义如下:
        def print_even(n):
            ....此处自己完成
            # 测试调用:
            # print(8)
            2 4 6 8
            # print(15)
            2 4 6 8 10 12 14

3.看懂student_info.py 的内容,并能够自己独立实现功能

names = {'小张', '小李', '小赵', '老冯'}

S = set() # 此集合用来保存未到者的名单
for n in names:
        result = input(n + "来了没有: ")
        if result == 'y':
                pass
        else:
                S.add(n)

print('未到者名单:', S)


def print_even(n):
        for i in range(2, n + 1):
                if i % 2 == 0:
                        print(i, end=' ')
        print()

# 测试调用:

print_even(8)
# 2 4 6 8

print_even(15)
# 2 4 6 8 10 12 14


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值