• 第五天


    第一部分 元组

    """
    元组:戴了枷锁的列表,对于不可变元素来说, 是不能改的。
    元组存在的意义:为了保护数据不被更改
    """

    一、创建元组
    # 创建普通元组:
    # 可以使用小括号,也不可以不使用
    a=(1,2,3)
    b=1,2,3,"abc"
    print(a,b)
    print(type(a),type(b))
    # 创建一个元素的元组,创建0个元素的元组
    c=("abc",)
    d="abc",
    print(c,type(c))
    print(d,type(d))
    # 创建0个元素的元组
    e=()
    # 虽然0个元素(),注意的是不能用不加括号的方式声明0个元组,可以声明一个元组变量
    li=[]
    print(e,type(e))

    # 不能省略小括号
    """
    1. 创建0个元组的时候不省略小括号
    2. 元组有嵌套的时候
    3. 元组作为表达式一部分,参与运算的时候,不能省略
    """

    # f=((1,2,3),(1),33)
    # f1=(1,2,3),(1),33
    # f1=1,2,3,1,33
    g=(1,2)+(3,5)
    print(g)
    g1=1,2+3,5
    print(g1)


    二、元组的操作
    1. 运算符 + * in not in is is not < > ==
    # print((1,2)+(4,5),"abc")
    print((1,2)+(4,5),("abc",))
    print((1,2)*3)
    k=(1,2)
    k1=(1,2)

    # 跟列表类似,创建了两个对象,只不过对象中指定的是不可变类型元素
    print(k is k1)
    print((1,2) is (1,2))
    # 原因是因为元组、列表,对象,占内存
    i=0
    i1=0
    print(i is i1)
    print("abc" is "abc")

    print("a" in ('a','b','c',(1,2)))
    print(1 in ('a','b','c',(1,2)))

    2. 索引
    t=(1,2,3,4,5)
    print(t[0])
    print(t[-1])
    # print(t[-100])

    3. 切片
    print(t[1:3])
    print(t[1:3:2])

    4. 遍历
    for i in t:
    print(t)
    t=("1",2,(1,2))
    for i in t:
    if type(i)==list or type(i)==tuple:
    for j in i:
    print(j)
    else:
    print(i)

    # 列表可以被修改,元组是不能被修改的(元组的元素,不是可变类型元素中的元素)
    t=("1",2,(1,2))
    t1=("1",2,[1,2])
    # t[0]="dd"
    t1[2][0]="ddd"
    print(t1)

    # 如果真的希望修改元组,可以使用拼接+的方式
    t=t[:2]+("ddd",)+t[2:]
    print(t)

    # 切片 整切片跟字符串是一样的。
    t2=t[:] #不会新建对象
    t3 = t[:3] # 才会新建一个对象
    print(t is t2)
    print(t is t3)


    三、 支持的方法
    1. count
    t=(1,2,3,4,5,1,1)
    print(t.count(1))
    # 只有字符串的count有start和end

    2. index:首次出的索引,index中的参数是内容
    print(t.index((1)))
    # start和end:包含start不包含end

    四、 元组的推导式
    b=(i+1 for i in t )
    # 元组的推导式产生的生成器
    print(b)
    for i in b:
    print(i)



    """
    总结 序列:字符串、字节、列表、元组
    1. 序列的特点
    (1)使用索引
    (2)使用切片
    (3)都有共同的操作符
    (4)都可以是迭代对象
    (5)使用len获得长度

    2. 序列的转换类别的相关方法:
    (1)list(序列):将序列转换成列表
    (2)tuple(序列):将序列转换成元组
    (3)str(序列):将序列转换成字符串(用途有限)
    (4)bytes(序列):转成字节:只能把字符串转换成字节,指定编码集,不能转换列表和元组
    (5)max(序列):最大值
    (6)min(序列):最小值
    (7)sum(序列):求和
    (8)sort(序列):排序,两种,就地排序list,sorted内置方法(可以对任何迭代对象进行排序)
    """
    s="abc"
    t=(1,7,2,3,4)
    li=[1,3,3,4,"a"]
    li1=["a","b"]
    by=b"abcde"
    print(list(s))
    print(list(t))
    print(list(by))

    print(tuple(s))
    print(tuple(li))
    print(tuple(by))

    print(str(li))
    print(str(t))
    print(str(by))

    print(bytes(s,encoding="utf-8"))
    # bytes使用时对列表只能转换数值类型元素
    # print(bytes(["-",2]))
    # print(bytes(t))

    # max比较的时候,不能把不同类型元素放在一起求max,min
    print(max(by))
    print(max(li))
    print(max(t))
    print(max(s))

    print(sum(by))
    print(sum(li))
    print(sum(t))
    print(sum(s))

    # 列表有排序,li类型下排序
    # li.sort()

    # sorted 内置方法可以对序列进行排序,不是就地排序,新建对象进行排序
    # sorted的返回值是列表
    # reverse,key使用方法跟list.sort()方法一致
    li=[1,2,444,55,6]
    li.sort()
    print(li)
    sorted(li)
    print(li)
    print(sorted(li))
    print(sorted(li,reverse=True))
    print(sorted(t))
    print(sorted(by))
    print(sorted(s))

    # 所有的方法元素必须合理,才可以进行比较

    第二部分 字典
    """
    字典:键 值dict
    说明:字典是无序的,key不能重复,key必须是不可变类型(必须是可hash的对象)

    """
    names=["michael","kate",'bob']
    scores=[100,88,60]
    # 1. 先遍历names找的kate,获得kate的位置
    # 2.遍历scores根据1的位置,返回score
    # 存储两个列表互相有相关的数据时,浪费资源

    一、字典的定义
    # 格式:
    # s={键:值,}
    s={"machael":100,"kate":88,"bob":60}

    # 字典根据key键可以快速的定位到值
    # 字典的原理 页码----汉字
    # [key---通过hash函数---hashcode]---汉字(值)
    # 60%7=
    # 对hashcode进行编码,遇到重复,一定会找到不同,唯一的hashcode
    # s={"d":[1,2,3,4,5]}
    print(s)
    print(type(s))

    # 其他的定义方式
    s1=dict(michael=100,kate=80,bob=60)
    print(s1)
    print(type(s1))

    # 字典key和value的访问和修改
    # 字典因为无序,所以不能索引也没有切片
    # 可以根据key获得value
    print(s1["kate"])
    s1["kate"]=88
    print(s1)

    # 如果key不存在,这个时候,不是获得,而是追加
    # s1["bb"] #如果是以获取value为目的,不赋予值,如果key不存在,会报错
    s1["aa"]=99
    print(s1)

    # 字典的存储结构
    # 定义的时候,出现了相同key,会覆盖,只保留最后的value
    s2={"tom":80,"tom":90,"jerry":100}
    print(s2)


    二、运算
    1. 运算符 不支持+ * < >
    # 支持 == is in(key)
    s={"michael":100,"kate":88,"bob":60}
    s1={"michael":100,"kate":88,"bob":60}
    s2=s
    print("michael" in s)
    print(s is s1)
    print(s is s2)

    三、 相关方法
    1. 追加相关
    formkeys:创建同值,不同键的字典
    d={}
    # key只能放字符串、元组
    # 不加值value会生成value都是None的字典(set的原理)
    d1=d.fromkeys((1,2,3))
    print(type(d1))
    d2=d.fromkeys(('a','b'),"nu")
    d2=d.fromkeys(('a','b'),["nu",1,2])
    print(d2)

    setdefault(key,value)
    # 如果key不存在,会追加一个value为none的键值对
    print(d.setdefault((4)))
    print(d)
    # 如果设定了对于value,key-value键值对
    print(d.setdefault(5,"aa"))
    print(d)
    #如果key已经存在了,什么都不会改变(重要)
    d.setdefault(4,100)
    print(d)
    # 使用key访问的形式可以覆盖
    d[4]="100"
    print(d)

    update方法:追加字典的key和value:优势在于一次可以加多个键值对
    # 原地进行修改
    a={1:"中",2:"b",3:122}
    b={4:"中国的"}
    a.update(b)
    print(a)

    2. 删除相关
    pop删除指定的键值对,同时返回该键值对中的值
    print(a.pop(1))
    print(a)

    popitem 随便删一个键值对,返回被删除的键值对
    a.popitem()
    print(a)

    clear 清空字典
    a.clear()
    # del a
    print(a)

    3. 获取
    get方法
    a={1:"中",2:"b",3:122,5:[1,2]}
    # print(a[4]) # 使用key value形式访问没有的键, 会报错
    print(a.get(1)) #如果键不存在,不会报错,返回None


    4. 复制
    b=a.copy()
    a[1]="new"
    a[5][0]="dd"
    print(a)
    print(b)
    print(id(a[5]))
    print(id(b[5]))
    print(id(a[1]))
    print(id(b[1]))

    5. 遍历
    # keys:返回字典中的所有键
    # values:返回字典中的所有值
    # items:返回字典中的键值
    for k in a.keys():
    print(k)
    for v in a.values():
    print(v)
    for k,v in a.items():
    print(k,v)
    for kv in a.items():
    print(type(kv))
    print(kv[0],kv[1])


    # 字典推导式,快速创建新字典
    c=range(8)
    d={i:i*2 for i in c}
    print(d)

    第三部分 集合
    """
    集合set
    都是字典的key
    说明:set的元素不可重复,无序,不可变类型
    """
    一、集合的定义:
    s={1,2,3,4,5,5}
    print(s,type(s))
    s1=set([1,2,3,4,5,6])
    print(s1,type(s1))
    # 创建空的集合,不能使用{},{}是空字典
    a=set()
    print(a,type(a))

    # len获得长度
    print(len(a))

    二、集合的运算
    1. 运算符 没有 + *
    # in is
    a={1,3,4,5}
    b={1,3,4,5}
    c=a
    print(a is b)
    print(a is c)

    2. 差集、并集、交集
    a={"a","b","c","d","e"}
    b={"g","b","c","r","e","h"}
    # 差集, a-b去掉a里面跟b重复的元素
    print(a-b)
    print(b-a)
    # 并集 和并两个集合 | 去掉重复的元素
    print(a|b)

    # 交集,&
    print(a&b)

    # 与非 两个集合中不是同时出现的元素(除了交集以外的元素)
    print(a^b)

    三、集合的方法
    1. 添加add
    s={1,2,3,4}
    s.add("444")
    s.add("444") #如果添加重复元素,则不再添加
    print(s)

    2. 删除
    remove删除,如果元素不存在会报错

    s.remove(3)
    print(s)
    # s.remove(66)

    s.discard() 用法跟remove类型,如果不存在不会报错
    s.discard()

    pop 随机删除,返回被删除的对象元素
    print(s.pop())

    clear:删除所有元素
    s.clear()
    print(s)

    3. 复制
    s={1,2,3,4}
    s1=s.copy()
    s2=s
    print(s is s1)

    # 方法也可以求差集、交集、并集
    a={"a","b","c","d","e"}
    b={"g","b","c","r","e","h"}
    # 获得差集(新创建的集合).difference()
    print(a.difference(b))
    print(a-b)
    print(a,b)

    # 差集会修改原来的集合 .difference_update()原地修改
    a.difference_update(b)
    print(a)

    # sort原地 sorted新建列表进行修改

    # 交集a.intersection() 新创建集合
    a={"a","b","c","d","e"}
    b={"g","b","c","r","e","h"}
    print(a.intersection(b))
    print(a&b)
    a.difference_update(b)
    print(a)

    # 交集a.intersection_update() 原地修改
    a={"a","b","c","d","e"}
    b={"g","b","c","r","e","h"}
    # 并集a.union()
    # union合并集合,当前集合不发生改变,返回集合,跟|一样,去重复
    print(a.union(b))
    print(a|b)

    # a.update()改变当前的集合,也是合并(跟字典的update)
    a.update(b)
    print(a)

    # 与非 返回不同时在两个集合中存在的元素(除了交集以外的元素)
    a={"a","b","c","d","e"}
    b={"g","b","c","r","e","h"}
    print(a.symmetric_difference(b))
    print(a^b)
    a.symmetric_difference_update(b)
    print(a)

    # 判断交集是否为空True False
    print(a.isdisjoint(b))
    # 判断当前的集合是不是另外一个集合的子集
    c={"a"}
    print(c.issubset(a))

    # 判断当前集合是不是另外一个集合的父集
    print(a.issuperset(c))
    四、集合的遍历
    for i in a:
    print(i)

    五、集合推导式
    a={"a","b","c","d","e"}
    print({i+"d" for i in a })

    # 集合和字典之间的数据转换
    # set(seq):转换一个集合
    # dict(键值对形式的序列):转换成字典
    d=dict(a=1,b=2,c=3)


























  • 相关阅读:
    rsync删除文件与rm删除文件
    centos扩容inode
    muduo笔记 日志库(一)
    C++ Primer学习笔记 第16章 模板与泛型编程(二)
    muduo笔记 时间戳类Timestamp
    muduo笔记 线程类Thread,当前线程CurrentThread
    muduo笔记 网络库(四)TimerQueue定时器队列
    Linux backtrace()系列函数
    muduo笔记 网络库(二)I/O复用封装Poller
    01背包问题
  • 原文地址:https://www.cnblogs.com/ztx695911088/p/9048559.html
Copyright © 2020-2023  润新知