減少**,提高效率
取乙個序列的部分元素
l [ start : end : step ] 含頭不含尾
1#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 l = [ 1, 3, 6, 9, 45, 66]56
print ( l[:4] ) #等同於l[0:4]
切片下標為 0 ~ 3
7print ( l[-2:] ) #
倒數切片 從倒數第2開始往後切 倒數第
二、倒數第一
8print ( l[:5:2] ) #
前5個數,每2個取乙個
9print ( l[::5] ) #
所有數,每5個取乙個
l[ : : -1] 倒切
在python中,迭代是通過 for...in 來完成的,而很多語言迭代 list 是通過下標完成的。
無論有無下標都可以迭代,如dict
dict不是按順序排列儲存,迭代出的結果順序很可能不一樣
dict預設迭代 key 如要要迭代 value:
同時迭代 key 和 value :
判斷是否可以迭代
迭代是python最強大的功能之一,是訪問集合元素的一種方式。
凡是可作用於for迴圈的物件都是iterable型別,即迭代物件
凡是可作用於next()函式的物件都是iterator型別,即迭代器,表示乙個惰性計算的序列(只有在需要返回下乙個資料時它才會計算)
迭代器物件從集合的第乙個元素開始訪問,直到所有的元素被訪問完結束。迭代器只能往前不會後退。
迭代器有兩個基本的方法:iter()和next()。
集合資料型別如list、dict、str等是迭代物件,但不是迭代器,可通過 iter() 函式獲得乙個迭代器物件
字串,列表或元組物件都可用於建立迭代器
迭代器物件可以使用常規for語句進行遍歷:
1也可以使用 next() 函式:#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 list = [1, 2, 3, 4]
5 it = iter(list) #
建立迭代器物件67
for x in
it:8
print(x, end="
") #
不換行輸出
1#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 list = [1, 2, 3, 4]
5 it = iter(list) #
建立迭代器物件67
stopiteration 異常用於標識迭代的完成,防止出現無限迴圈的情況
簡單卻強大的可用來建立list的生成式
如:生成乙個列表 [1x1, 2x2, 3x3, ..., 10x10]
用迴圈做
1用列表生成式做#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 l =
5for x in range(1,11):
7for i in
l[:]:
8print (i, end = "
")
1列表生成式內還可加 if 判斷#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 l = [ x*x for x in range(1,11)]56
for i in
l[:]:
7print (i, end = "
")
1還可使用兩層循壞,如生成乙個全排列#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 l = [ x*x for x in range(1,11) if x%2 ==0 ]5#
篩選出僅偶數的平方
6for i in
l[:]:
7print (i, end = "
")
1通過列表生成式,我們可以直接建立乙個列表。但是,受到記憶體限制,列表容量肯定是有限的。而且,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。#!/usr/bin/python32#
-*- coding:utf-8 -*-
34 l = [ m+n for m in
'abc
'for n in
'xyz']
5for i in
l[:]:
6print (i, end = "
")
所以,如果列表元素可以按照某種演算法推算出來,那我們是否可以在迴圈的過程中不斷推算出後續的元素呢?這樣就不必建立完整的list,從而節省大量的空間。在python中,這種一邊迴圈一邊計算的機制,稱為生成器:generator。
在 python 中,使用了 yield 的函式被稱為生成器(generator)。
跟普通函式不同的是,生成器是乙個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是乙個迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,返回 yield 的值, 並在下一次執行 next() 方法時從當前位置繼續執行。
呼叫乙個生成器函式,返回的是乙個迭代器物件。
以下例項使用 yield 實現斐波那契數列:
1#!/usr/bin/python3
2import
sys3
4def fibonacci(n): #
生成器函式 - 斐波那契
5 a, b, counter = 1, 1, 0
6while
true:
7if (counter >n):
8return
9yield
a10 a, b = b, a +b
11 counter += 1
1213 f = fibonacci(10) #
f 是乙個迭代器,由生成器返回生成
14while
true:
15try:16
print (next(f), end="")
17except
stopiteration:
18 sys.exit()
Python高階特性
l csx sarah tracy bob jack print l 0 l 1 l 2 輸出 csx sarah tracy l 0 3 輸出 csx sarah tracy 如果第乙個索引是0,還可以省略 print l 2 輸出 bob jack print l 2 1 輸出 bob d fo...
Python高階特性
python 高階特性 from collections import iterable from collections import iterator 切片 list切片 l list range 100 print l 0 3 取前3個元素 print l 3 取前3個元素 print l 4...
Python高階特性
切片 slice 非常靈活,體現了python的簡便性 1.取乙個list和tuple的部分元素時的簡化操作 l michael sarah tracy bob jack l 0 3 michael sarah tracy 從0開始不包括3,第乙個索引是0可省略,也支援負數按倒數的順序取值,什麼都不...