zoukankan      html  css  js  c++  java
  • 第五天

    第一部分 元组

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

    一、创建元组
    # 创建普通元组:
    # 可以使用小括号,也不可以不使用
    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)


























  • 相关阅读:
    English 2
    速算24点
    心理学1
    从微服务到函数式编程
    034 01 Android 零基础入门 01 Java基础语法 04 Java流程控制之选择结构 01 流程控制概述
    033 01 Android 零基础入门 01 Java基础语法 03 Java运算符 13 运算符和表达式知识点总结
    032 01 Android 零基础入门 01 Java基础语法 03 Java运算符 12 运算符和if-else条件语句的综合案例——闰年问题
    031 01 Android 零基础入门 01 Java基础语法 03 Java运算符 11 运算符的优先级
    030 01 Android 零基础入门 01 Java基础语法 03 Java运算符 10 条件运算符
    029 01 Android 零基础入门 01 Java基础语法 03 Java运算符 09 逻辑“非”运算符
  • 原文地址:https://www.cnblogs.com/ztx695911088/p/9048559.html
Copyright © 2011-2022 走看看