zoukankan      html  css  js  c++  java
  • day 07

    元组内置方法

    作用

    只可取,不可更改的列表。当创建的时候就被写死了。

    定义方式

    ()内用逗号隔开多个元素(可以为任意数据类型)

    lt = list([1,2,3])
    tup = tuple((1,2,3))
    print(tup,type(tup))
    

    如果元组只有一个元素,必须得加逗号

    tup1 = (1,)
    print(tup1,type(tup1))
    

    使用方法

    索引取值

    print(tup[0])
    

    索引切片

    print(tup[0:3])
    

    for循环

    for i in tup:
        print(i)
    

    成员运算

    print(0 in tup)
    

    len长度

    print(len(tup))
    

    index获取元素索引

    print(tup.index(1))
    

    count 计数

    print(tup.count(2))
    

    有序or无序

    有序

    可变or不可变

    压根不存在

    字典数据类型

    作用

    存储多个数据,对每个数据具有描述

    定义方式

    {}内用逗号隔开多个键key(具有描述意义,不能为可变数据类型)值value(任意数据类型)对 # 散列表(哈希表)

    dic = {'name':1}
    print(dic)
    
    # 0001
    dic = {0:'功能1','功能2'}
    print(dic)
    
    dic = {[1,2]:'a'}  # 可变==不可哈希 不可变==可哈希
    print(dic)
    
    dic = {(1,2):'a'}
    print(dic)
    

    使用方法

    优先掌握

    # 1.按key取值/按key修改值
    dic = {'a':1,'b':2,'c':3}
    
    print(dic['a'])
    
    # 2.添加值,没有就添加,有就修改
    dic['d'] = 4
    print(dic)
    
    # 3.for循环
    for i in dic:
        print(i)
    
    # 4.成员运算
    print('a' in dic)
    
    # 5.len长度
    print(len(dic))
    
    # 6.keys/values/items
    print(dic.key())  # 看成列表
    print(dic.value())  # 获取所有值
    
    print(dic.item())
    for i in dic.items():
        print(i)
    for sksskkk,asasa in dic.items():  # 解压缩
       print(sksskkk,asasa)
    

    需要掌握

    # get:获取
    s = 'e'
    # print(dic[s])  # KeyError: Nonetype --> s是None,并不是你想象的e
    print(dic.get('b', 1))  # 字典中没有返回None,可以给定一个默认值
    
    # update : 更新,等同于list里的extend
    dic1 = {'a': 1, 'c': 2}
    dic2 = {'b': 1, 'd': 2}
    dic1.update(dic2)
    print(dic1)
    
    # fromkeys
    print(dict.fromkeys(dict.fromkeys([1, 2, 3, 4])))  # 默认给None
    
    # setdefault  # 字典有这个key,就不修改,没有则增加
    dic.setdefault('j', 2)
    dic.setdefault('a', 2)
    print(dic)
    
    # 4. 有序or无序:无序
    
    # 5. 可变or不可变:可变
    dic = {'a': 1}
    print(id(dic))
    dic['b'] = 2
    print(id(dic))
    
    

    散列表(哈希表)

    散列表/哈希表存储数据 --》相比较列表,插入/删除更快

    # 1. 首先对key做了哈希处理(能对所有数据类型都可以哈希处理):梅森旋转算法(生成伪随机数)--> 通过哈希处理对于每个key他都可以生成一个序列(永不重复,相同的东西进入哈希处理,结果相同)
    
    
    '''
    import hashlib
    
    m = hashlib.md5()
    # m.update(b'a')  # 0cc175b9c0f1b6a831c399e269772661
    # m.update(b'b')  # 92eb5ffee6ae2fec3ad71c777531578f
    # m.update(b'c')  # 4a8a08f09d37b73795649038408b5f33
    # m.update(b'd')  # 8277e0910d750195b448797616e091ad
    m.update(b'a')  # 0cc175b9c0f1b6a831c399e269772661
    print(m.hexdigest())
    '''
    
    # 2. 使用哈希函数对刚刚生成的序列(纯数字),对纯数字除9取余(0,1,2,3,4,5,6,7,8)
    
    

    集合类型内置方法(set)

    集合可以理解成一个集合体

    作用

    用于关系运算的集合体,由于集合内的元素无序且集合元素不可重复,因此集合可以去重,但是去重后的集合回打乱原来元素的顺序。

    定义方式

    {}内用逗号隔开多个元素,每个元素必须是不可变类型。

    s = {1, 2, 1, 'a'}  # s = set({1,2,'a'})
    print(f"s: {s}")
    
    s: {1,2,'a'}
        
        
    s = {1, 2, 1, 'a', 'c'}
    for i in s:
        print(i)   
        
    1
    2
    c
    a
    
    s = set('hello')
    print(f"s: {s}")
    
    s: {'e','c','h','l'}
    

    使用方法

    优先掌握

    长度len

    s = {1,2,'a'}
    print(f'len(s):{len(s)}')
    
    len(s):3
    

    成员运算in和not in

    s = {1,2,'a'}
    print(f'l in s: {i in s}')
    
    l in s: True
    

    |并集、union

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    
    print(f"pythoners|linuxers: {pythoners|linuxers}")
    print(f"pythoners.union(linuxers): {pythoners.union(linuxers)}")
    
    pythoners|linuxers: {'egon', 'tank', 'kevin', 'jason', 'nick', 'sean'}
    pythoners.union(linuxers): {'egon', 'tank', 'kevin', 'jason', 'nick', 'sean'}
    

    &交集、intersection

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    
    print(f"pythoners&linuxers: {pythoners&linuxers}")
    print(f"pythoners.intersection(linuxers): {pythoners.intersection(linuxers)}")
    
    pythoners&linuxers: {'nick'}
    pythoners.intersection(linuxers): {'nick'}
    

    -差集、difference

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    
    print(f"pythoners-linuxers: {pythoners-linuxers}")
    print(f"pythoners.difference(linuxers): {pythoners.difference(linuxers)}")
    
    pythoners-linuxers: {'tank', 'jason', 'sean'}
    pythoners.difference(linuxers): {'tank', 'jason', 'sean'}
    

    ^对称差集、symmetric_difference

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    
    print(f"pythoners^linuxers: {pythoners^linuxers}")
    print(
        f"pythoners.symmetric_difference(linuxers): {pythoners.symmetric_difference(linuxers)}")
    
    pythoners^linuxers: {'egon', 'tank', 'kevin', 'jason', 'sean'}
    pythoners.symmetric_difference(linuxers): {'egon', 'tank', 'kevin', 'jason', 'sean'}
    

    ==

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    javers = {'nick', 'egon', 'kevin'}
    
    print(f"pythoners==linuxers: {pythoners==linuxers}")
    print(f"javers==linuxers: {javers==linuxers}")
    
    pythoners==linuxers: False
    javers==linuxers: True
    

    父集:>、>= 、issuperset

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    javaers = {'jason', 'nick'}
    
    print(f"pythoners>linuxers: {pythoners>linuxers}")
    print(f"pythoners>=linuxers: {pythoners>=linuxers}")
    print(f"pythoners>=javaers: {pythoners>=javaers}")
    print(f"pythoners.issuperset(javaers): {pythoners.issuperset(javaers)}")
    
    
    pythoners>linuxers: False
    pythoners>=linuxers: False
    pythoners>=javaers: True
    pythoners.issuperset(javaers): True
    

    子集:<、<=、issubset

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    javaers = {'jason', 'nick'}
    
    print(f"pythoners<linuxers: {pythoners<linuxers}")
    print(f"pythoners<=linuxers: {pythoners<=linuxers}")
    print(f"javaers.issubset(javaers): {javaers.issubset(javaers)}")
    
    
    pythoners<linuxers: False
    pythoners<=linuxers: False
    javaers.issubset(javaers): True
    

    需要掌握

    add

    s = {1,2.,'a'}
    s.add(3)
    
    print(s)
    
    {1,2,3,'a'}
    

    remove

    s = {1,2,'a'}
    s.remove(1)
    
    print(s)
    
    {2,'a'}
    

    difference_update

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    pythoners.difference_update(linuxers)
    
    print(f"pythoners.difference_update(linuxers): {pythoners}")
    
    pythoners.difference_update(linuxers): {'tank', 'jason', 'sean'}
    

    discard

    s = {1, 2, 'a'}
    # s.remove(3)  # 报错
    s.discard(3)
    
    print(s)
    
    {1, 2, 'a'}
    

    isdisjoint

    pythoners = {'jason', 'nick', 'tank', 'sean'}
    linuxers = {'nick', 'egon', 'kevin'}
    pythoners.isdisjoint(linuxers)
    
    print(f"pythoners.isdisjoint(linuxers): {pythoners.isdisjoint(linuxers)}")
    
    pythoners.isdisjoint(linuxers): False
    

    数据类型总结

    按存值个数区分

    存值个数 数据类型
    单个值 数字、字符串
    多个值(容器) 列表、元组、字典、集合

    按可变不可变区分

    可变or不可变 数据类型
    可变 列表、字典、集合
    不可变 数字、字符串、元组

    有序无序区分

    有序or无序 数据类型
    有序(可按索引取值) 字符串、列表、元组
    无序 字典、集合

    按访问类型区分

    直接访问 数字
    顺序访问(序列类型) 字符串、列表、元组
    key值访问(映射类型) 字典

    深浅拷贝

    拷贝/浅拷贝/深拷贝都是针对可变类型数据而言的

    可变or不可变

    id不变值可变,即在原值的基础上修改,则为可变数据类型;值变id也变,即重新申请一个空间放入新值,则为不可变数据类型

    age = 19
    print(f'first:{id(age)}')
    age = 20
    print(f'second:{id(age)}')
    

    拷贝(赋值)

    如果l2是l1的拷贝对象,则l1内部的任何数据类型的元素变化,则l2内部的元素也会跟着改变,因为可变类型值变id不变。

    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = l1
    
    l1.append('g')
    print(l1)
    
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    
    print(l2)
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    
    

    浅拷贝

    如果l2是l1的浅拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,则l2会跟着改变。

    import copy
    
    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = copy.copy(l1)
    
    l1.append('g')
    print(l1)
    
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    
    print(l2)
    
    ['a', 'b', 'c', ['d', 'e', 'f']]
    
    l1[3].append('g')
    print(l1)
    
    ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
    
    print(l2)
    
    ['a', 'b', 'c', ['d', 'e', 'f', 'g']]
    

    深拷贝

    如果l2是l1的深拷贝对象,则l1内的不可变元素发生了改变,l2不变;如果l1内的可变元素发生了改变,l2也不会变,即l2永远不会因为l1的变化而变化。

    import copy
    
    l1 = ['a', 'b', 'c', ['d', 'e', 'f']]
    l2 = copy.deepcopy(l1)
    
    l1.append('g')
    print(l1)
    ['a', 'b', 'c', ['d', 'e', 'f'], 'g']
    
    print(l2)
    ['a', 'b', 'c', ['d', 'e', 'f']]
    
    l1[3].append('g')
    print(l1)
    ['a', 'b', 'c', ['d', 'e', 'f', 'g'], 'g']
    
    print(l2)
    ['a', 'b', 'c', ['d', 'e', 'f']]
    

    内置方法中的copy方法都是浅拷贝的copy,也就是说如果你的列表里面有可变数据类型,那就不要使用.copy方法。

  • 相关阅读:
    百家号开发文档测试
    python使用selenium模拟登录网易
    python使用selenium模拟操作Chrome浏览器
    java 解析网易邮箱里面的附件地址,获取下载地址
    python连接hive
    linux重定向标准输入输出,标准错误
    linux 查看网络流量命令
    kafka源码阅读环境搭建
    tomcat启动index页面显示不出来
    git学习笔记
  • 原文地址:https://www.cnblogs.com/colacheng0930/p/11529210.html
Copyright © 2011-2022 走看看