zoukankan      html  css  js  c++  java
  • python中迭代和解析

    1、迭代工具包括:for循环,列表解析,in成员关系测试,及(map内置函数,sorted,zip,enumerate,filter返回可迭代对象)
    
    2、文件迭代器
    
                    里面有一个__next__方法,每次调用时会返回文件中的下一行,当遇到文件末尾时,会引发StopIteration异常,而不是返回空字符串
    
                    f = open('script1.py)
    
                    f.__next()__
    
                   
    
    3、手动迭代:iter和next
    
                    python3.0提供了一个内置函数next,他会自动调用__next__方法。
    
                    例如:
    
                    X.next()  等价于   X.__next__()
    
                   
    
                    iter(X)  内置函iter会把X转化为可迭代对象,也就是带有next的方法。
    
    4、列表和很多其他内置对象,不是自身的迭代器,他们支持多次打开迭代器。
    
                    例如:
    
                    L = [1,2,3]
    
                    print(iter(L) is L)   #输出:False
    
                    #print(L.__next__())   #会抱错
    
                   
    
                    I = iter(L)
    
                    print(I.__next__())  #输出:1
    
                    print(next(L))  #输出:2
    
    5、列表解析
    
                    [表达式  for 变量 in  目标 if  条件]
    
                    例如:
    
                    L = [1,2,3,4,5]
    
                    temp = [x*2 for x in L if x%2==0]
    
                    print(temp)  #输出:[4, 8]
    
                    或者
    
                    L1 = ['a','b','c','d']
    
                    L2 = [1,2,3,4,5]
    
                    temp = [(a,b) for a in L1 for b in L2]
    
                    print(temp)   #输出:[('a', 1), ('a', 2), ('a', 3), ('a', 4), ('a', 5), ('b', 1), ('b', 2), ('b', 3), ('b', 4), ('b', 5), ('c', 1), ('c', 2), ('c', 3), ('c', 4), ('c', 5), ('d', 1), ('d', 2), ('d', 3), ('d', 4), ('d', 5)]
    
    6、sum,any,all,max,min这些函数用于任何可迭代对象
    
                    print(sum([1,2,3,4,5]))  #计算和
    
                    print(any([1,2,3,4,5]))    #只要所给对象是不是空,就返回True
    
                    print(all([1,2,3,4,5]))  #所有对象为真时,返回True,否则返回False
    
                    print(max([1,2,3,4,5]))  #计算最大值
    
                    print(min([1,2,3,4,5]))   #计算最小值
    
    7、解包:         
    
                    def f(a,b,c,d):print(a,b,c,d,sep='&')
    
                    f(1,2,3,4)  #输出:1&2&3&4
    
                    f(*[1,2,3,4]) #输出:1&2&3&4
    
                   
    
                    unzip
    
                    x = (1,2)
    
                    y = (3,4)
    
                    print(list(zip(x,y)))#输出:[(1,3),(2,4)]
    
                    print(*zip(x,y))
    
                    a,b = zip(*zip(x,y))
    
                    print(a,b,sep=' ')
    
    8、range返回的并不是迭代器,但是可以通过iter函数产生多个迭代器,zip,map,filter则不支持多个迭代器
    
                    例如:
    
                    L = range(5)
    
                    #print(next(L))  报错
    
                    t = iter(L)
    
                    print(next(t))  #输出:0
    
                    print(next(t))     #输出:1
    
                    print(next(t))     #输出:2
    
                    print('*'*8)         #输出:3
    
                    k = iter(L)
    
                    print(next(k))    #输出:0
    
                    print(next(k))    #输出:1
    
                    print(next(k))    #输出:2
    
    9、字典迭代器
    
                    D = {'a':1,'b':2,'c':3}
    
                    t = iter(D)
    
                    for i in t:
    
                                    print(i,end=',')
    
                                   
    
                    #输出:
    
                    a,b,c
    
    10、其他迭代器
    
                    使用yield语句,用户定义的函数可以转化为可迭代的生成器函数
    
                    当编写圆括号时候,列表解析转化为可迭代生成器函数
    
                    用户定义的类通过__iter__或者__getitem__运算符重载变得可迭代
    
                   
    

      

  • 相关阅读:
    深度优先和广度优先
    水管工游戏(深度优先)
    炸弹人
    广度优先(迷宫找人)
    System.Data.Entity.Core.MetadataException: 无法加载指定的无数据资源
    Element Cascader 级联选择器 单选操作优化
    Windows服务 ProjectInstaller 获取 路径
    Quartz.NET ScheduledFireTimeUtc 当超过1分钟时出现的问题。
    记录:一个SQL SERVER奇怪的问题。
    log4.net 配置
  • 原文地址:https://www.cnblogs.com/hbcb533/p/3673914.html
Copyright © 2011-2022 走看看