1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3
4 # 迭代(Iteration) 列表生成式(List Comprehensions)生成器(generator)
5 # 可迭代对象(Iterable) 迭代器(Iterator)
6 '''
7 1. Iterable是一种object,它具有__iter__或__getitem__方法,能够返回一个iterator
8 2. Iterator是一种用于next方法的object。调用next()方法,可以每次取得iterator中的一个元素。
9 3. Iteration: 在一个数据容器中遍历它的成员的过程 就是iteration。
10 4. Generator 是那种通过yield方法来遍历元素的函数
11 Generator 也是iterator,但是只能遍历它一次。它的好处是不存储元素值,也就不占用内存空间
12 '''
13 from collections import Iterable, Iterator
14
15 def g(): #定义一个Generator
16 yield 1
17 yield 2
18 yield 3
19
20 print('Iterable? [1, 2, 3]:', isinstance([1, 2, 3], Iterable)) #判断列表是否可迭代
21 print('Iterable? \'abc\':', isinstance('abc', Iterable)) #判断字符串是否可迭代
22 print('Iterable? 123:', isinstance(123, Iterable)) #判断一个整数是否可迭代
23 print('Iterable? g():', isinstance(g(), Iterable)) #判断一个生成器是否可迭代
24
25 #判断一个列表是否是迭代器
26 print('Iterator? [1, 2, 3]:', isinstance([1, 2, 3], Iterator))
27 #判断一个迭代器对象是否是迭代器
28 print('Iterator? iter([1, 2, 3]):', isinstance(iter([1, 2, 3]), Iterator))
29 #判断一个字符串是否是迭代器
30 print('Iterator? \'abc\':', isinstance('abc', Iterator))
31 #判断一个整数是否是迭代器
32 print('Iterator? 123:', isinstance(123, Iterator))
33 #判断一个生成器是否是迭代器
34 print('Iterator? g():', isinstance(g(), Iterator))
35
36 # iter list:
37 print('for x in [1, 2, 3, 4, 5]:')
38 for x in [1, 2, 3, 4, 5]:
39 print(x)
40
41 print('for x in iter([1, 2, 3, 4, 5]):')
42 for x in iter([1, 2, 3, 4, 5]):
43 print(x)
44
45 print('next():')
46 it = iter([1, 2, 3, 4, 5]) #创建迭代器对象
47 print(next(it)) #输出迭代器的下一个元素
48 print(next(it))
49 print(next(it))
50 print(next(it))
51 print(next(it))
52
53 d = {'a': 1, 'b': 2, 'c': 3} #定义一个字典
54
55 # iter each key: 迭代字典的key
56 print('iter key:', d)
57 for k in d.keys():
58 print('key:', k)
59
60 # iter each value: 迭代字典的value
61 print('iter value:', d)
62 for v in d.values():
63 print('value:', v)
64
65 # iter both key and value:
66 print('iter item:', d)
67 for k, v in d.items():
68 print('item:', k, v)
69
70 # iter list with index:
71 print('iter enumerate([\'A\', \'B\', \'C\']')
72 for i, value in enumerate(['A', 'B', 'C']):
73 print(i, value)
74
75 # iter complex list:
76 print('iter [(1, 1), (2, 4), (3, 9)]:')
77 for x, y in [(1, 1), (2, 4), (3, 9)]:
78 print(x, y)