zoukankan      html  css  js  c++  java
  • python基本数据类型及常用方法(二)

    一、元组

    t1 = (1, 2)
    t2 = tuple((1, 2))
    t3 = (1, )
    
    # 常用操作:索引 | 切片 | 长度
    
    # 索引取值
    # t = (1, 2, 3, 2, 3, 2)
    # print(t[1])
    # print(t[-2])
    
    # 切片
    # print(id(t))
    # nt = t[:-1:]
    # print(nt, id(nt))
    
    # 长度(item元素个数)
    # print(len(t))
    
    # 常用内置方法:.count(obj)  |  .index(obj, bIndex, eIndex)
    # print(t.count(2))  # 该数据集合可以存放相同数据
    # print(t.index(2, 2, 3))
    
    # 有序存储 | 可存放多个数据 | 不可变(内部可以包含可变对象,可变对象已久可变)
    
    # 应用场景:将不允许操作的列表可以转化为元组,将允许操作的元组转化为列表
    

    二、字典

    # 特别了解:dict是python中仅存的mapping类型
    # 定义
    d1 = {'a': 10, 'b': 20}
    # 1
    d1 = {'name': 'Owen', 'age': 18}
    print(d1)
    # 2
    d2 = dict({'name': 'Owen', 'age': 18})
    print(d2)
    # 3
    d3 = dict(name='Egon', age=58)
    print(d3)
    
    # 无序,存放多个值,可变 => 通过key取值
    d1['a']
    
    # 增删改查
    d1[key] = value: key存在就是改,不存在就是增
    dic = {}
    # 增:key不存在
    dic['name'] = 'Mac'
    print(dic)
    # 改:key已存在
    dic['name'] = 'Big Mac'
    print(dic)
    # 查:
    print(dic['name'])
    # 删:
    del dic['name']
    print(dic)
    
    # get取值  d1[key]: 取,如果key存在就报错,所以用get(key, defalut)
    dic = {'a': 10, 'b': 20}
    # print(dic['c'])  # KeyError
    res = dic.get('c')  # 拥有默认值,None,可以避免错误
    print(res)
    res = dic.get('d', 'key不存在')  # 可以自定义默认值
    print(res)
    
    # 增 update({'a': 100, 'c': 300}): key有更新,无新增
    dic.update({'a': 100, 'c': 300})
    print(dic)
    
    # 删 pop(key): 根据key删且返回对应value
    res = dic.pop('c')  
    print(res)
    
    # 复制:(浅拷贝|深拷贝)
    newDic = dic.copy()
    print(newDic)
    d1 = {'list': [1, 2]}
    d2 = d1.copy()
    print(id(d1), id(d1['list']))
    print(id(d2), id(d2['list']))
    d1['list'].append('abc')
    print(d2)
    # 浅copy:只做第一层copy,内部的成员地址还是原来的地址
    
    # 随机删除,返回值是(key, value)
    print(dic)
    print(dic.popitem())
    print(dic.popitem())
    print(dic)
    
    # 如何定义一个空字典
    # 第一个参数:keys:list|tuple|str,第二个参数:统一的默认value
    d10 = {}.fromkeys(['a', 'b', 'c'], '')
    print(d10)  # {'a': '', 'b': '', 'c': ''}
    
    # 独自设置默认值
    d11 = {'a': 10, 'teas': ['Owen']}
    # d11 = {'a': 10}
    # 添加老师
    # 如果有teas,在原teas基础上添加老师,如果没有,新建一个空teas
     if 'teas' not in d11:  # 成员运算
         d11['teas'] = []
     d11['teas'].append('Egon')
     d11['teas'].append('LiuXX')
     print(d11)
    
    # 原d11中,如果有teas这个key,setdefault相当于什么都没干
    # 如果没有,就将第二个参数(默认值)传给teas存放到d11中
    d11.setdefault('teas', [])
    d11['teas'].append('Egon')
    d11['teas'].append('LiuXX')
    print(d11)
    
    # 字典的循环(迭代)
    dic = {'a': 10, 'b': 20, 'c': 30}
    # 直接for循环(遍历)字典得到的是key
    for k in dic:
        print(k, dic[k])
        
     # 能不能只循环值
    values = dic.values()
    print(values, type(values))
    # 存放key的集合
    keys = dic.keys()
    print(keys, type(keys))
    # 存放key-value的键值对关系
    k_vs = dic.items()
    print(k_vs, type(k_vs))  
    # dic.values() | dic.keys() | dic.items() 不是原生list,不能直接索引取值,但可以for循环取值
     vs = list(values)
     print(vs[1])
     for v in vs:
         print(v)
    for v in values:
        print(v)
    print()
    for k in keys:  # 跟直接遍历字典是一样的
        print(k)
    
    print()
    # ***** 同时遍历k-v
    for k, v in dic.items():
        print(k, v) 
        
    # 案例: 不区分大小写,计算每一个名字出现的次数,记录在字典中
    ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon']
    # {'owen': 2, 'egon': 3 ...}
    name_dic = {}
    for name in ls:
        # 名字全小写,不用区分大小写
        name = name.lower()
        # 名字是否在字典中存在:存在 - 次数+1 | 不存在 - 添加并设置初值1
        if name not in name_dic:
            # 不存在
            name_dic[name] = 1
        else:
            # 存在
            name_dic[name] += 1
    print(name_dic)
    
    ls = ['Owen', 'owen', 'Egon', 'LiuXX', 'Liuxx', 'egon', 'egon']
    name_dic = {}
    for name in ls:
        name = name.lower()
        # name已存在,不管,不存在,初始化指定key:name值为1
        name_dic.setdefault(name, 0)
        name_dic[name] += 1
    print(name_dic
    

    三、集合set

    # 1.定义 {}代表空字典,用set()来创建空集合
    s1 = set()
    s2 = set({1, 2, 3})
    
    # 2.重点:数据具有唯一性
    # i) 单列数据集合:str,list,tuple,set    双列:dict
    # ii) 无序存储:无key无index,无法取值
    # iii) 可变数据类型,内部可以存放任意类型数据,但数据具有唯一性
    
    # 3.运算
    p_set = {'a', 'b', 'c', 'egon'}
    l_set = {'x', 'y', 'z', 'egon'}
    
    # 交集 &
    res = p_set & l_set
    print(res)
    res = p_set.intersection(l_set)
    print(res)  # {'egon'}
    
    # 并集
    res = p_set | l_set
    print(res)
    res = p_set.union(l_set)
    print(res)  # {'z', 'c', 'y', 'x', 'b', 'a', 'egon'}
    
    # 差集
    res = p_set - l_set
    print(res)  # {'a', 'b', 'c'}
    res = l_set.difference(p_set)
    print(res)  # {'x', 'z', 'y'}
    
    # 对称差集
    res = p_set ^ l_set
    print(res)
    res = p_set.symmetric_difference(l_set)
    print(res)  # {'y', 'a', 'b', 'x', 'z', 'c'}
    
    了解:父子set
    sup_set = {1, 2, 3, 4, 5}
    sub_set = {1, 2, 3}
    temp_set = {3, 2, 1}
    flag_set = {7, 8, 9}
    
    print(sup_set > sub_set)  # True
    print(sup_set < sub_set)  # False
    print(temp_set == sub_set)  # True
    # 两个set是否没有交集
    res = flag_set.isdisjoint(temp_set)  # True
    
    # 添加删除操作
    s = set()
    s.add('abc')
    s.add('xyz')
    print(s)
    res = s.pop()  # 随机删除一个ele元素
    print(res)
    if 'xyz' in s:
        s.remove('xyz')  # 有ele删除,无ele抛异常
        
    # 案例与应用场景
    # 选课:
    class_map = [
        ('owen', 'python'),
        ('egon', 'linux'),
        ('egon', 'python'),
        ('liuxx', 'python'),
        ('liuxx', 'java')
    ]
    # 需求:
    # 1.多少人参加了选课: ['owen', 'egon', 'liuxx']
    # 2.都选了哪些课程: ['python', 'linux', 'java']
    # 利用逻辑代码去重
    names = []
    for name, _ in class_map:
        # 判断列表中是否已存在,不存在才添加
        if name not in names:
            names.append(name)
    print(names)
    
    # 利用set去重
    classes = set()
    for _, cless in class_map:
        classes.add(cless)
    classes = list(classes)
    print(classes)
    
    
  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/fuwei8086/p/10600417.html
Copyright © 2011-2022 走看看