Python基础(二)

作者: EvanForEver | 来源:发表于2018-02-07 15:28 被阅读33次

    Python中的序列

    • 序列的概念: 有序存储,并能通过下标偏移进行访问。
    • 序列对象:str,list , tuple
    • 初始化 (列表list用[]、元组tuple用()、字符串string用"")
    • 标准操作:
      成员操作
      连接与重复 (同类型对象间使用)
      访问(索引与切片)
    • 其它操作
      BIF:
      □ len , reversed , zip(序列拼接) ,sorted , enumerate(枚举)
      □ max, min, sum
      □ all(判断是否都为空), any(判断是否含有空元素)
      序列类型转换
      □ list() , str() , tuple()

    列表List

    • 初始化
    • 列表属性
    • 列表操作
      □ 访问
      □ 成员操作
      □ +与*
      □ 比较,排序
      □ 其它操作
    #列表内部操作
    l1[3]='Caffe'#赋值
    l1.append(l2)#添加到未尾,如果元素是列表,也是按照列表添加进来,只添加一个元素
    l1.extend(['Torch'])#扩展,如果是扩展元素是列表,是只添加列表内的元素,可以一次性添加多个元素
    l1.insert(0,'sklearn')#插入元素,按索引
    l1.index('sklearn')#获得指定元素的索引位置,如果存在相同元素,返回的是从右到左第一个的索引位置
    l1.count('AI')#统计元素出现的次数
    l1.pop()#返回并弹出最后一个元素(即元素会被删除)
    l1.pop(3)#返回并弹出指定索引位置的元素
    del l1[-1] #删除列表元素,按索引位置删除
    l1.remove('AI')#指定元素进行删除,如果存在相同元素,则删除从左至右第一个元素
    
    #列表操作
    reversed(l1) #对列表进行反转,返回一个reversed对象,要list化才会显示
    sorted(l1)
    l2<l3 #列表比较,逐元素进行对比
    

    列表推导式 list comprehension

    • 定义:
      □ 列表推导式也叫列表解析式(list comprehension),是利用现有列表创建新列表。
      □ 这种可以非常简洁的方式来快速生成满足特定需求的列表,代码可读性强
      □ Python的内部实现对列表推导式做了大量优化,可以保证很快的运行速度。
    • 语法:
      □ [表达式 for 变量 in 列表]
      □ [表达式 for 变量 in 列表 if 条件]

    元组Tuple

    • 元组tuple是只读有序序列。方法较list少。
      (tuple是不可修改的,即元组里的元素是不可修改,除了列表和字典)
    • 可以认为tuple是只读列表,它有许多操作和list很接近,除了对其进行修改。
      (元组只能和元组之间进行运算,否则报错。(1,2)+4是错的,(1,2)+(4,)=(1,2,4))

    集合Set

    • 集合set:一组key的无序排列集合,因此无法用索引切片访问
    • 主要作用:用于去重及集合间操作
    • 集合内部操作:
      a.add('f') #添加key
      a.remove('AI') #删除key
    • 集合间操作:
      □ 交集
      □ 并集
      □ 差集
      □ 集合与元组
    #集合间操作
    a=set('abcde')
    b=set('cdefg')
    
    # &交集
    a&b
    # 结果:{'c', 'd', 'e'}
    
    # |并集
    a|b
    # 结果:{'a', 'b', 'c', 'd', 'e', 'f', 'g'}
    
    # -差集
    a-b
    # 结果:{'a', 'b'}
    
    #合并
    a.update(b)#集合合并
    

    字典Dictionary

    记住:字典和集合都不是序列,因此无法用切片和索引

    • 定义:字典这种数据结构,是把一个元素映射到另一个元素上,可以简单理解为k:v对应。
    • 常见操作:
      □ 初始化 (可以用{},或者dict())
      □ 成员判断 (只针对key)
      □ 访问
      □ 字典推导式
    • Key值的选取:Key值必须是可被哈希的,也就是说key只能是数字,字符串或元组
    #新增成员
    d1['address']='beijing'
    
    #访问:按key访问value:
    d1['name']
    d1.get('name',-1)
    #访问所有key
    d1.keys()
    #访问所有value
    d1.values()
    #访问所有元素
    d1.items()
    
    #删除成员
    d1.pop('address')#返回指定key的值。并弹出元素
    d1.popitem()#r返回整个元素。并弹出
    
    #清空
    d1.clear()
    
    #Key值的选取,能被hash的值都可以做为key,即不可变类型可以做为key值。
    hash('a')
    

    Python内存管理

    □ 变量与对象之间关系:引用
    □ 查看一个对象被引用总数

    #在Python中,每个对象都有存有指向该对象的引用总数,即引用计数(reference count)。
    #我们可以使用sys包中的getrefcount(),来查看某个对象的引用计数。
    #需要注意的是,当使用某个引用作为参数,传递给getrefcount()时,参数实际上创建了一个临时的引用。
    #因此,getrefcount()所得到的结果,会比期望的多1。
    
    >>from sys import getrefcount
    >>a = [1, 2, 3]
    >>print(getrefcount(a))
    2
    >>b = a
    >>print(getrefcount(b))
    3
    

    可变与不可变对象

    • 核心思想:引用与对象分离
      □ 引用可以随时指向一个新的对象
      □ 一个对象可以被多个引用指向
    • 可变数据对象
      □ 通过引用其元素,改变对象自身
    • 不可变数据对象
      □ 不能改变对象本身,只能改变引用的指向
    >>a=b=c=5#创建了三个变量,均指向一个int类型的对象5,一个对象可以被多个引用指向
    >>del c#删除c这个变量对5的引用
    >>a=[1,2,3]#把a这个变量的指向,重新指向了一个列表对象,引用可以随时指向一个新的对象
    >>print(b)#b依旧指向5,5没有被改变
    5
    
    #什么是可变对象?
    >>a=b=c=[1,2,3]
    >>print(a,b,c)
    [1, 2, 3] [1, 2, 3] [1, 2, 3]
    >>a.append(4)#通过a能真正改变列表[1,2,3],
    >>print(a,b,c)#通过引用其元素,改变对象自身
    [1, 2, 3, 4] [1, 2, 3, 4] [1, 2, 3, 4]
    
    #什么是不可变对象?
    >>a=b=c='beijing'
    >>a='shanghai'
    #打印a,b,c,d指向对象的id,看看是否是一个家伙
    >>print('id(a):',id(a),'id(b):',id(b),'id(c):',id(c))
    id(a): 2246883863600 id(b): 2246883876232 id(c): 2246883876232
    
    #看似是把a变量指向的字符串从beijing,改为shanghai,但其它并没有改变beijing,只是a的指向被改变了
    >>print(a,b,c)#不能改变对象本身,只能改变引用的指向
    shanghai beijing beijing
    
    

    相关文章

      网友评论

        本文标题:Python基础(二)

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