python中迭代和解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
1、迭代工具包括:for循环,列表解析,in成员关系测试,及(map内置函数,sorted,zip,enumerate,filter返回可迭代对象)
 
2、文件迭代器
 
                里面有一个__next__方法,每次调用时会返回文件中的下一行,当遇到文件末尾时,会引发StopIteration异常,而不是返回空字符串
 
                f = open(‘script1.py)
 
                f.__next()__
 
                
 
3、手动迭代:iternext
 
                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)]
 
6sum,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=‘ ‘)
 
8range返回的并不是迭代器,但是可以通过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__运算符重载变得可迭代
 
               

  

python中迭代和解析,布布扣,bubuko.com

python中迭代和解析

上一篇:浅析Java中CountDownLatch用法


下一篇:微信小程序--动态添加class样式