Python提供切片(Slice)操做符用来获取列表、元组等数据中的部分元素;如,读取列表python
list[m:n]:表示获取m-n区间的元素
list[m:n:o]:表示以条件o获取m-n之间的元素git
num = list(range(100)) # 建立0-99的列表num
>>> num[0:3] ['0', '1', '2'] >>> num[:3] # 索引从0开始时,0能够省略 ['0', '1', '2']
>>> num[-3:] ['97', '98', '99']]
>>> num[::5] [0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
>>> num[:] [0, 1, 2, 3, 4, 5, 6...98,97]
Python 中经过for循环来遍历list或tuple,这种遍历称为迭代(Iteration);github
>>> user={'0':'张三','1':'李四','2':'王五','3':'赵六',} >>> for key in user: ... print(key) >>> print('---------分割线-----------') >>> for value in user.values(): ... print(value)
输出结果:app
0
1
2
3
---------分割线-----------
张三
李四
王五
赵六函数
>>> user={'0':'张三','1':'李四','2':'王五','3':'赵六',} >>> print(isinstance(1,Iterable)) >>> print(isinstance(user,Iterable))
输出结果:code
False
True对象
>>> user={'0':'张三','1':'李四','2':'王五','3':'赵六',} >>> for key,value in enumerate(user.values()): ... print(key,value)
输出结果:索引
0 张三
1 李四
2 王五
3 赵六内存
迭代器是一个能够记住遍历的位置的对象;迭代器对象从集合的第一个元素开始访问,直到全部的元素被访问完结束;迭代器只能往前不会后退;get
迭代器有两个基本的方法:建立迭代器对象的 iter() 和 输出迭代器对象的下一元素的 next();
>>> nums = [1,2,3,4] >>> num = iter(nums) >>> print(next(num)) >>> print(next(num)) >>> print(next(num))
输出
1
2
3
>>> nums = [1,2,3,4] >>> num = iter(nums) >>> for n in num: ... print(n)
输出结果:
1
2
3
4
>>> while True: ... try: ... print(next(num)) ... except StopIteration: ... print("迭代完毕") ... sys.exit()
输出:
1
2
3
4
迭代完毕
>>> list(range(10)) [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> for x in range(1,11): ... l.append(x*x) ... >>> l [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>>
>>> [x * x for x in range(1,11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] >>>
>>> [x * x for x in range(1,11) if x % 2 ==0] [4, 16, 36, 64, 100]
>>> [x + y for x in 'ABC' for y in 'abc'] ['Aa', 'Ab', 'Ac', 'Ba', 'Bb', 'Bc', 'Ca', 'Cb', 'Cc']
>>> str = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [key + '=' + value for key, value in str.items()] ['x=A', 'y=B', 'z=C']
经过列表生成式能够生成一个列表,可是列表受内存限制,容量是有限的,而且,若是建立一个包含几百万元素的列表,而只须要使用其中元素时便形成了空间浪费;
这时候就应该使用生成器(generator);生成器表达式能作的事情列表解析基本都能处理,只不过在须要处理的序列比较大时,列表解析比较费内存。
>>> gen = (x * x for x in range(10)) >>> gen <generator object <genexpr> at 0x0000000002742E08> >>>
>>> for x in gen: ... print(x) ... 0 1 4 9 16 25 36 49 64 81 >>>
生成器函数:在函数中若是出现了yield关键字,那么该函数就再也不是普通函数,而是生成器函数;
def fib(max): n, a, b = 0, 0, 1 while n < max: print(b) a, b = b, a + b n = n + 1 return 'done'
>>> fib(6) 1 1 2 3 5 8 'done'
def fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return 'done'
>>> for n in fib(6): ... print(n) ... 1 1 2 3 5 8