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__运算符重载变得可迭代

               

  

posted @ 2014-04-18 18:31  再不奋斗就会被淘汰  阅读(225)  评论(0编辑  收藏  举报