• python基础---列表生成器、迭代器等


    一、列表生成式

      用来创建list的表达式,相当于for循环的简写形式

      语法: [表达式 for循环 判断条件]

     1 '''
     2 普通写法
     3 '''
     4 def test():
     5     l= []
     6     for i in range(10):
     7         l.append(i*i)
     8     return l
     9 print(test()) 
    10 
    11 '''
    12 高级写法
    13 '''
    14 l = [x * x for x in range(10)]
    15 print(l)
    16 
    17 '''
    18 更高级的用法
    19 格式:[操作 for i in range(x) 执行操作的条件(x)]
    20 '''
    21 ##得到0-9序列中偶数的平方
    22 l = [x * x for x in range(10) if x%2==0)]
    23 print(l)
    24 '''
    25 高级解释:x*x 来源于0--9的for循环 但是 x要满足x%2==0
    26 '''
    1 ## 提取字符串中的数字,组成字符串
    2  l = 'asd123fds123'
    3 l2 = [x for  x in l   if  x.isdigit()]
    4 x =''.join(x)  ## 字符串拼接
    5 print(x)
    6 '''
    7   解释:x 来源于for循环(遍历l), 但是x要是数字  
    8 '''

    二、生成器generator

        生成器和列表生成器很像,只是把中括号变成小括号

         生成器不会一次性生成所有数据,只有在调用的时候才生成。

        生成器不能通过切片、或者下标取数据,只能循环或者next()取数据--- 注意生成器的位置问题,类似于‘’句柄‘’

    ##生成器的语法和列表生成器很像
    g = (x*x for x in range(10))
    print(g)                      ## 输出是:generator对象
    print(type(generator)) ## 输出是:generator对象
    
    print(next(g))  ## 获得下一个元素
    
    ## 直接遍历generator对象
    for n in g:
        print(n)

    二、可迭代对象和迭代器

        可迭代对象(Iterable):能被for遍历     不能next()

        迭代器(Iterator):        能被for遍历     能next()函数调用,不断返回下一个值

        迭代器对象表示一个数据流,可以被看做是一个序列,但是长度不可知。只是在需要的时候,才会计算。

    可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误

     1 ## 可以被for循环的对象,称为可迭代对象
     2 ## 可以被next()和for访问,称之为迭代器对象(用的时候才生成)
     3 from collections import  Iterable,Iterator
     4 
     5 ## 判断对象的类型-- 类似于type
     6 print(isinstance([],Iterable))## True 可迭代 对象
     7 print(isinstance([],Iterator))## Flase 不是可迭代器对象 不能next访问
     8 
     9 print(isinstance('a',Iterable))##True
    10 print(isinstance('a',Iterator))##Flase
    11 
    12 print(isinstance({},Iterable))##True
    13 print(isinstance({},Iterator))##Flase
    14 
    15 ## 数值既不是可迭代对象,也不是迭代器对象
    16 ## 列表、字符串、字典、元祖 都是Iterable对象,不是Iterator对象
    17 ## generator、map、filter既是Iterable对象,也是Iterator对象
    18 
    19 ##可迭代对象转为迭代器对象--- iter()
    20 it = iter([1,2,3])
    21 print(next(it))  ##输出1
    22 
    23 
    24 print('----------------------')
    25 l = [(2,12),(6,23),(4,8)]
    26 l.sort(key=lambda x:x[1],reverse=True) ## sort(key,...)根据什么条件排序,排序条件
    27 
    28 print(l)
    29 print(l[0][0])

     type主要用于获取未知变量的类型,范围比较小
    isinstance主要用于判断A类是否继承于B类,范围更大

    有生之年,只诉衷肠不言殇.....
  • 相关阅读:
    Android开发规范
    驱动开发规范
    USER 版本与ENG 版本差异
    解决:更改短信中心号码不能及时更新显示
    深度分析:Android中Mms设置页面更改短信中心号码流程
    Android中Parcel的分析以及使用
    DialogFragment详解
    开启飞行模式,进入信息,再关闭飞行模式,进入信息设置查看短信息中心号码,有时短信息中心号码显示无。
    研究 iOS 摄像头缩放的内容
    iOS图片缓存库基准对比
  • 原文地址:https://www.cnblogs.com/dyl01/p/8533081.html
Copyright © 2020-2023  润新知