tiyan 发表于 2018-8-13 12:53:25

Python-序列的高级特性

  一.切片
  字符串、列表、元祖可以切片,字典和集合不能切片





  二. 迭代
  1.任何可以迭代的对象都可以用for循环遍历;
  2.字典的迭代:默认是通过key进行迭代的;
  集合:

  字典:

  3.字典的枚举:枚举只能返回返回两个值,一个是索引下标,一个是迭代的元素;

  4.for 循环里,同时引用了两个变量,在 Python 里是很常见的;
  如果要显示[(1,2),(2,3),(3,4)]怎么实现迭代显示?

  5.怎么去判断是否可迭代
  isinstance("abc",Iterable)

  三.列表生成式
  列表生成式,其实就是生成列表的一种方式,是python内置的;
  1.简单的列表生成式
  [ i*i for i in range(10) ]      返回1-10平方的一个列表;
  [ fun(i) for i in l]                  对列表的每个元素执行某个函数操作;
  对1-10的数做2n+1的变化

  100以内偶数的平方

  2.for...if的嵌套
  [ i*i for i in range(1,10) if i%2==0]   返回1-10之间所有的偶数
  [ i for i in range(1,10) if isprime(i)]      返回1-10之间所有的质数,判断质数的函数是自定义的;

  3.for...for...的嵌套
  [ i+j for i in "abc" for j in "123"]    # 返回"abc"和"123"的所有组合;、

  4.for...for...的嵌套
  转化为大写字母

  判断是否字符串,如果是,执行转为大写
  isinstance('a',str) 判断a是否字符串



  四.生成器
  1.生成器的定义
  在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的 list,从而节省大量的空间。在 Python 中,这种一边循环一边计算的机制,称为生成器(Generator)
  -列表生成式可以直接创建一个列表,但列表容量受内存的限制;
  - 在Python中一边循环一边计算的机制,称为生成器(Generator);就是你需要多少,它就生成多少;
  2.为什么需要生成器
  通过列表生成式,我们可以直接创建一个列表,受到内存限制,列表容量肯定是有限的;
  创建一个包含 100 万个元素的列表,占用很大的存储空间;
  3.创建生成器的方法和查看生成器元素的方式:
  (1)将列表生成式的[]改为();
  使用生成器的next方法;(不常用)
  (2)在定义的函数中加入yield关键字;
  生成器是可迭代的对象,直接通过for循环查看;
  fib 函数定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,逻辑非常类似 generator。要把 fib 函数变成 generator,只需要把print b 改为 yield b 就可以.
  函数顺序执行,遇return语句或最后一行函数语句就返回。
  generator函数在每次调用next() 的时候执行,遇到 yield 语句返回,再次执行时从上次返回的yield 语句处继续执行。

  4.生成器应用:生产者消费者模型
  例:

页: [1]
查看完整版本: Python-序列的高级特性