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