美文网首页
05 常用技巧介绍(列表、元组、字典)

05 常用技巧介绍(列表、元组、字典)

作者: 武漂的小丙 | 来源:发表于2019-10-28 15:04 被阅读0次

    1 列表操作

    li = ['alex', 'wusir', 'egon', '女神', 'taibai']
    
    # 在最后的位置增加
    li.append('当当')
    print(li)
    # 迭代加到最后的位置
    li.extend('昊天')
    print(li)
    # 在‘女神’后面加一个123
    li.insert(4,123)
    print(li)
    # 按索引删除,默认删除最后一个
    li.pop()
    print(li)
    li.pop(1)
    print(li)
    # 按元素删除,有重复元素,删除索引最小的一个
    li.append('当当')
    print(li)
    li.remove('当当')
    print(li)
    
    # 清空列表
    li.clear()
    print(li)
    '''输出结果如下:
    ['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
    ['alex', 'wusir', 'egon', '女神', 'taibai', '当当', '昊', '天']
    ['alex', 'wusir', 'egon', '女神', 123, 'taibai', '当当', '昊', '天']
    ['alex', 'wusir', 'egon', '女神', 123, 'taibai', '当当', '昊']
    ['alex', 'wusir', '女神', 123, 'taibai', '当当', '昊']
    ['alex', 'wusir', '女神', 123, 'taibai', '当当', '昊', '当当']
    ['alex', 'wusir', '女神', 123, 'taibai', '昊', '当当']
    []
    '''
    

    删除列表

    li = ['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
    # 从0开始删除前两个:
    del li[0:2]
    print(li)
    
    '''输出结果如下:
    ['egon', '女神', 'taibai', '当当']
    '''
    

    赋值

    li = ['alex', 'wusir', 'egon', '女神', 'taibai', '当当']
    li[0] = '男神'
    print(li)
    li[0] = [1,2,3]
    print(li)
    # 将从0开始的前两个拿出来,然后迭代添加进去
    li[0:2] = '阿里巴巴'
    print(li)
    li[0,4] = [123,'春哥', 'dddd']
    print(li)
    
    '''输出结果如下:
    ['男神', 'wusir', 'egon', '女神', 'taibai', '当当']
    [[1, 2, 3], 'wusir', 'egon', '女神', 'taibai', '当当']
    ['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '当当']
    [123, '春哥', 'dddd', 'egon', '女神', 'taibai', '当当']
    '''
    

    查询

    for i in li:
        print(i)
    print(li[0:2])
    

    公共方法:

    • len:测量长度
    len(li)
    
    • count:统计出现的次数
    li = ['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '巴巴']
    li.count('巴')
    
    • index:返回索引
    li = ['阿', '里', '巴', '巴', 'egon', '女神', 'taibai', '巴巴']
    # 返回第一次出现的索引
    li.index('巴')
    
    • sort:排序
    # 正向排序
    li.sort()
    # 反向排序
    li.sort(reverse=True)
    
    • reverse:反转
    li = [123, '春哥', 'dddd', 'egon', '女神', 'taibai', '当当']
    li.reverse()
    # reverse反转的是自身
    print(li)
    '''输出结果如下:
    ['当当', 'taibai', '女神', 'egon', 'dddd', '春哥', 123]
    '''
    

    列表嵌套:

    li = ['taibai', '武藤兰', '苑昊', ['alex','egon',89],23]
    # 打印一个“藤”
    print(li[1][1])
    
    # 将‘taibai’改为‘Taibai’,即首字母大写
    name = li[0].capitalize()
    li[0] = name
    print(li)
    

    2 元组操作

    • 元组:
      • 只读列表
      • 可循环查询,可切片
      • 儿子不能改,孙子可能可以改
    tu = (1, 2, 3, 'alex', [2, 3, 4, 'taibai'], 'egon')
    # 找到alex
    print(tu[3])
    # 分片
    print(tu[0:4])
    # 循环
    for i in tu:
        print(i)
    # 将taibai 改成 TAIBAI
    tu[4][3] = tu[4][3].upper()
    print(tu)
    # 添加一个元素‘sb’
    tu[4].append('sb')
    print(tu)
    
    
    # str ---》 list 用 split
    # list ---》 str 用 jion
    # list的元素都必须是字符串
    s = 'alex'
    s1 = '__'.join(s)
    tu = ( 'alex', 'egon')
    s2 = '__'.join(tu)
    print(s1)
    print(s2)
    

    3 字典

    python唯一映射数据类型

    • 数据类型:

      • 可变数据类型(不可hash):list,dict,set
      • 不可变数据类型(可hash):元组,bool, int,str
    • dict:

      • key:必须是不可变数据类型,可hash
      • value:任意数据类型
      • 优点:
        • 二分查找去查询
        • 存储大量的关系型数据
      • 特点:
        • 无序的
    dic1 = {
        'name': ['大猛', '小孟'],
        'py9': [{'num':71, 'avg_age':18}],
        True:1,
        (1,2,3): 'wuyiyi',
        # 元组里面带有list也是不行的
        # (12,[1,2]): '行不行',
        2: '儿歌'
    }
    print(dic1)
    
    # 删
    print(dic1.pop('py9')) # 有则按键删除, 返回此键的value
    print(dic1.pop('py9',"没有此建")) # 没有此建,可以设置返回值
    print(dic1.popitem()) # 随机删除,有返回值 元组(里面是删除的键值)
    print(dic1)
    
    # 查
    print(dic1.keys())
    print(dic1.values())
    print(dic1.items())
    

    遍历的技巧:

    a = 1
    b = 2
    # a,b 地址互换
    a,b = b,a
    print (a, b)
    a, b = [1, 2]
    print (a, b)
    a, b = [1, 2], [2, 3]
    print (a, b)
    a, b = (1, 2)
    print (a, b)
    
    for k,v in dic1.items():
        print (k, v)
    

    键值不报错的方式:

    v1 = dic1['name']
    
    v2 = dic1['name1'] # 报错
    
    print(dic1.get('name1', '没有这个键'))
    

    输入一段字符串,只将字母转成“空格”

    info = input(">>>")  #fhdalf1232ddfqer12dfjal13
    for i in info:
        if i.isalpha():
            info = info.replace(i," ")
    l = info.split()
    print(len(l))
    

    ps:“for i in info:”在这一句的时候info已经载入for循环中了,因此循环在里面修改info的时候,也不会更改for循环的执行情况

    4 作业

    循环打印列表:“(1, 2, 3, 'alex', [2, 3, 4, 'taibai'], 'egon')” , 要求子列表的元素也能循环打印,即如下所示:

    1, 
    2, 
    3, 
    'alex', 
    2, 
    3, 
    4, 
    'taibai', 
    'egon'
    

    解答如下:

    # 采用递归的方式迭代打印元素
    def iteratorPrint(it):
        for item in it:
            if isinstance(item, Iterable) and  not isinstance(item, str):
                iteratorPrint(item)
            else:
                print(item)
    
    
    iteratorPrint(tu)
    

    5 小结

    5.1 = 、==、 is

    • =:赋值
    image-20191027133417887.png
    • ==:比较值是否相等

    • is:比较的是内存地址

    image-20191027133213542.png

    5.2 内存地址

    • id:看内容
    image-20191027133311061.png
    • 数字,字符串:小数据池

      • 数字的范围:-5 ~256

        image-20191027191722923.png
    • 字符串的范围:

      • 不能有特殊字符
      image-20191027192208524.png
    • 剩下的list、tuple、dict、set都不没有小数据池的概念

    5.3 编码说明

    • 编码:

      • ascii:
        • 只能有英文
        • 一个字节表示(8位)
      • unicode:
        • A:32位 四个字节
        • 中:32位 四个字节
      • utf-8:
        • A: 8位 一个字节
        • 中: 24位 三个字节
      • gbk:
        • A: 8位 一个字节
        • 中:16位 两个字节
      • 注意事项:
        • 各个编码之间的二进制,是不能互相识别的,会产生乱码;
        • 文件的存储,传输,不能是unicode(只能是utf-8 、 utf-16、gbk、ascii等),只是用于转换
    • python3

      • str 在内存中用的是unicode存储的,
        • bytes类型
      image-20191027212151079.png
    • 对于英文

      • str:
        • 表现形式: s = 'alex'
        • 编码方式 010101010 unicode
      • bytes
        • 表现形式: s1 = b'alex'
        • 编码方式: 000101010 utf-8 gbk 。。。
    • 对于中文:

      • str:
        • 表现形式:s = '中国'
        • 编码方式:0101010 unicode
      • bytes:
        • 表现形式: s = b'x\e91\e91\e01\e21\e32'
        • 编码方式:000101010 ut-8 gbk 。。。
    • encode编码, 如何将str --> bytes,而且可以设置编码方式

    s1 = 'alex'
    s11 = s1.encode('utf-8')
    print(s11)
    s2 = '中国'
    # utf-8 是三个字节表示一个汉字
    s21 = s2.encode('utf-8')
    print(s21)
    # gbk 是两个字节表示一个汉字
    s22 = s2.encode('gbk')
    print(s22)
    

    相关文章

      网友评论

          本文标题:05 常用技巧介绍(列表、元组、字典)

          本文链接:https://www.haomeiwen.com/subject/gcdbvctx.html