zoukankan      html  css  js  c++  java
  • python学习笔记(9):容器

    一、容器

        0.判断所有的容器是否为空,用if not xxx(容器名):来进行判断

        1.list 列表

        序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。

        列表的数据项不需要具有相同的类型。

    # li = [1,2,3,4,'567',[1,2,3],{1:'one',2:'two'}]
    # print(type(li))  #创建的实例就是list类型
    # print(type(list))  #对于内部的实例是type类
    # print(li)
    # print(li[0])
    # print(li[-1]) # 打印倒数第一个,就是最后一个元素
    # print(li[-2]) # 打印倒数第二个元素就是[1,2,3]这个数组
    #
    #
    # # 查找元素的位置
    # print(li.index('567'))
    # print(li.index([1,2,3]))
    
    #添加元素
    # l_a = [1,2,3]
    # l_a.append(4)  #将元素添加进入数组的末尾
    # print(l_a)
    # l_a.append(5)
    # print(l_a)
    # l_a.append(6)
    # print(l_a)
    # # 将7 8 9 加进数组中去
    # l_b=[7,8,9]
    # l_a.extend(l_b)  #通过从可以迭代的列表中来添加元素
    # print(l_a)
    
    # 判断容器是否为空,直接使用if not 集合
    # l_a=[]
    # if not l_a:     #如果l_a是空集合not xx和isNone不是一回事,对于所有的集合,要判断其是否为空,
    #                 # 使用not ,if not 容器名称  : #集合为空
    #     print('empty')
    # if len(l_a)==0:
    #     print('Empty')
    
    # t = (1,2,3,'456')
    # print(type(t))
    # t[0] = 'a'   #这个地方要注意tuple数据类型不支持赋值操作
    # tuple也不支持append()方法
    # t.append('x')
    #
    # li = [1,2,3,4,5,6]
    # del(li[-1])   #删除最后一个元素的操作
    # print(li)

        2. tuple 元组(只读列表)

        3. dict 字典 字典的每个键值(key=>value)对用冒号(:)分割,每个对之间用逗号(,)分割,整个字典包括在花括号({})中。(dict内部是无序的)

    # 字典数据类型
    d = {'a':1,'b':2,1:'one',2:'two',3:[1,2,3]}
    # print(type(dict))   # dict的数据类型是type数据雷星
    # print(type(d))      # 实例化变量,会直接生成dict对象
    # print(d)
    #
    # # 访问字典数据类型的数组
    # print(d['a'])
    # print(d[1])
    # print(d[3])
    # # 判断元素是否存在
    # print('c' in d)  #'c'这个字符是不在数组中的
    # print(3 in d)   # 3 这个数字是在数组d的
    # del(d[3])  #删除3这个key所对应的键值对
    # print(d)
    
    # # 根据key来做遍历
    # for key in d:
    #     print(d[key])
    # print('.........')
    
    # 通过key value的形式来做遍历
    #  for key,value in d.items() :
    #     print(key,value)
    #
    # keys = d.keys()
    # print(type(keys))   # key的类型是<class 'dict_keys'>类型
    # print(keys)  # 这里面的key值有'a','b',1,2,3

        4. set 集合 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算。

    #set 是一个无序不重复的容器,能够实现自动去重
    s_a = set([1,2,2,3,4,5,6])
    s_b= set([4,5,6,7,8,9])
    print(s_a)
    print(s_b)
    
    # 判断元素是否存在于set中
    print(5 in s_a)   #True
    print(10 in s_a)   #False
    
    # 求出set的并集
    print(s_a | s_b)
    print(s_a.union(s_b))
    
    # 求出set的交集
    print(s_a & s_b)
    print(s_a.intersection(s_b))
    
    # 求出差集 A - B,这个地方就是A -A&B 的部分
    print(s_a-s_b)
    print(s_a.difference(s_b))
    
    # 对称差  就是  (A | B) - (A & B)  在这个set集合中,{4,5,6}是他们的公共部分
    print(s_a ^ s_b)
    print(s_a.symmetric_difference(s_b))
    
    # 修改元素,将x元素添加进x集合中
    s_a.add('x')
    print(s_a)
    print(s_a.update([4,5,60,70]))
    print(s_a)
    
    
    # 删除元素
    s_a.remove(70)   #删除元素70
    # s_a.remove(100)   #这个地方会报错KeyError: 100
    print(s_a)
    
    print(len(s_a))
    
    #对 set进行遍历
    for i in s_a:
        print(i)

    二、切片:高效的切一个子数组出来

    存取序列(列表,元组,字符串)的任意一部分

    格式:seq[开始索引:结束索引:步长]

      默认值

      负数索引

      负数步长

    # 切片操作 [start:end;steps]
    li =list(range(10)) #生成0 到9之间的数组
    print(li[2:5]) # 得出来的子数组是[2, 3, 4],是一个左闭右开的区间
    print(li[:4])
    print(li[5:])
    print(li[0:10:3])
    print(li[0:20:3])
    print(li)
    
    # 负值怎么处理?
    print(li[5:-2])  # 从第6个元素开始计算,到倒数第二个元素截止
    print(li[9:0:-1])  # 倒数索引,从9开始计算,最后一个元素是1,不包括0
    print(li[9::-1])   # 从9开始进行倒排即9-0之间的所有元素
    # 切片生成一个新的对象
    print(li)  #保持原样
    print(li[::-1]) # 对数组切片进行快速反转

    三、列表推导

    # li = list(range(10))
    #
    # li = []
    #
    # for i in range(10):
    #     li.append(i)
    # print(li)
    #
    # li = [0]*10
    # print(li)  #生成了有10个0 的数组
    
    #生成前10个偶数,一行搞定
    # li = [i*2 for i in range(10)]
    # print(li)
    
    # li_2d = [[0]*3]*3  # 产生一个3行3列的全0数组,这个地方做了引用,每一列都是同一个对象,所以在修改的时候,只要修改第一个元素,那么所有的行的第一个元素都会变
    # print(li_2d)
    # li_2d[0][0]=100
    # print(li_2d)
    
    # li_2d = [[0] * 3 for i in range(3) ]
    # print(li_2d)
    # li_2d[0][0]  = 100
    # print(li_2d)
    
    # 找出列表中所有的偶数 set
    s = {x for x in range(10) if x%2==0}
    print(s)
    print(type(s))
    
    # 找出列表中所有的偶数 dict
    d = {x:x%2==0 for x in range(10)}  #快速判断某个数是不是偶数
    print(type(d))
    print(d)

    四、生成器

     

    五、迭代器

    1.问题的提出

      (1)可以直接作用于for循环的对象统称为可迭代对象:Iterable

      (2)可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator(表示一个惰性计算的序列)

    2. 集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  • 相关阅读:
    springboot(10)logback日志配置
    springboot(9)springboot整合redis
    springboot(8)springboot整合mybatis
    springboot(7)springboot整合freemarker和thymeleaf
    springboot(6)过滤器 监听器 拦截器
    springboot(5)单元测试及MockMVC类的使用及自定义异常处理
    springboot(4)springboot热部署插件及idea热部署及配置文件注解注入
    springboot(3)使用MultipartFile上传数据文件及项目打成jar包
    springboot(2)内置序列化框架为Jackson及springboot文件目录结构
    git rebase
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10188052.html
Copyright © 2011-2022 走看看