Python高级特性

切片(slice)

  • 作用:取list、tuple、str的部分元素
  • slice操作符
    • L[开始索引:结束索引:间隔]
    • 举例
      L[0:3] 取前三个元素 同L[:3]
      L[-2:-1] 取后一个元素 同L[-2:]
      L[10:20:2]从索引为10开始,每隔两个元素取一个,直到索引为20
      L[::5]从索引为0开始所有数每隔5个取一个
      L[:]复制list
      L[::-1]复制一个反的list
  • 特点
    • 正序索引从0开始,倒数索引从-1开始
    • 如果第一个索引是0,可以省略第一个参数
    • 如果最后一个索引是-1,可以省略第二个参数
    • 取出的数是前包含后不包含
  • 可作用于list、tuple、字符串,操作的结果跟原值的类型相同,list取出单个值的时候,类型为该值的类型

迭代(Iteration)

  • 通过for…in循环遍历list、tuple、dict、字符串等,这种遍历称为迭代
  • 无论有没有下标,只要是迭代对象,都可以迭代
    • dict的存储不是按照list的方式顺序排列,所以迭代出来的结果顺序很可能不一样
    • 默认情况下,dict迭代的是key,用for key in d
    • 如果迭代value,用for value in d.values()
    • 同时迭代可以和value,用for k,v in d.items()
  • 通过collections模块的Iterablele类型判断是否是迭代对象
    • isinstance(判断的对象,iterable)
    • 返回布尔值
    • isinstance(判断的对象,str)判断是不是字符串
  • 通过enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同事迭代索引和元素本身
    • for i,value in enumerate([‘a’,‘b’,‘c’])

列表生成式

  • 作用:运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list
  • range(start, stop[, step])生成一个整数列表,常用于for循环
    • start:计数默认从0开始,可省略,如range(5)等同于range(0,5)
    • stop:计数到stop结束,但不包括stop,如range(5)是[0,1,2,3,4]没有5
    • stop:步长,默认为1,如range(0,5)等同于range(0,1,5)
  • list(range(1,5))生成一个从1到4的list
  • [xx for x in range(1,11)]生成一个x从1到10值为xx的list
    把要生成的元素x*x放到前面
    后面跟for循环
  • [x*x for x in range(1,11) if x%2 ==0]生成一个筛选出仅x为偶数的平方list
    结果为[4,16,36,64,100]
  • [m+n for m in ‘ABC’ for n in ‘XYZ’]使用两层循环生成全排列
    结果为[‘AX’,‘AY’,‘AZ’,‘BX’,‘BY’,‘BZ’,‘CX’,‘CY’,‘CZ’]
  • [k + ‘=’ +v for k,v in d.items()],生成key=value格式的list
  • [s.lower() for s in L]将list中的所有字符串变成小写

生成器(generator)

  • 是指python中一边循环一边计算的机制
  • 创建生成器的方法
    • 把列表生成式的[]换成()
      L = [xx for x in range(10)] L是一个list
      g = (x
      x for x in range(10)) g是一个generator
    • 推算的算法比较复杂,可以用函数创建generator
      • 函数实际上是定义了generator的推算法则
      • 用yielb关键字,替换函数中的print()
      • 如果一个函数中含有yield,那这个函数就不再是一个普通的函数,而是一个generator
      • 与普通函数的执行流程不同
        普通函数时顺序执行,遇到return或者执行完就返回
        generator是在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行
  • 打印方法
    • 通过next()打印
      生成器的值可以通过next(g)一个一个的打印
      每次调用next(g),就计算出g的下一个元素的值
      没有更多元素的时候,抛出StopIteration的错误
      基本不使用该方法
    • 通过for循环打印
      由于generator是可迭代对象,所以可以用for循环打印值
      for n in g: print(n) 打印第一种创建方法产生的generator
      for n in fib(6):print(n) 打印第二种创建方法产生的generator

迭代器

  • 可迭代对象
    • 可以直接作用于for循环的对象称为可迭代对象:Iterable
    • 分类
      一类是集合数据类型:list、tuple、dict、set、str等
      一类是generator
    • 可以用isinstance()判断是否是可迭代对象
      isinstance([],Iterable)
  • 迭代器
    • 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
    • 可以用isinstance()判断是否是迭代器
      isinstance([],Iterator)
    • 所有的迭代器都是可迭代对象
      用iter()可以把非迭代器的可迭代对象变成迭代器(str、list等)
      iter(‘abc’)
    • 迭代器标识一个惰性计算的序列
  • 总结
    • 凡是可作用于for循环的对象都是可迭代对象(iterable类型)
    • 凡是可作用于next()函数的对象都是迭代器(iterator类型)
    • 集合数据类型(list、dict、str等)是iterable但不是iterator,不过可以通过iter()函数变成iterator
    • python循环本质上就是通过不断调用next()函数实现的
    • 包含关系
      可迭代对象(:iterable):可作用于for循环
      生成器(迭代器)(:iterator):可作用于next()函数
      集合数据类型)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值