切片(slice)(非常靈活,體現了python的簡便性)
1.取乙個list和tuple的部分元素時的簡化操作;
>>>l = ['michael', 'sarah', 'tracy', 'bob', 'jack']
>>> l[0:3]
['michael', 'sarah', 'tracy']
#從0開始不包括3,第乙個索引是0可省略,也支援負數按倒數的順序取值,什麼都不寫[:]就複製乙個list
>>>
>>> for key in d:
... print(key)
ll = list(range(100))
#前十個
>>> ll[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
#後十個
>>> ll[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
#前十個每兩個取乙個
>>> ll[:10:2]
2.tuple也可以切片操作只是返回結果認識tuple(和list唯一的區別tuple是不變物件);
迭代
1.在python中迭代通過for...in...實現,dict和list的結構不同,故迭代結果也大不相同,dict預設迭代key,若要迭代key則需要使用for value in dict_name.values(),同時迭代可以喝value使用for k, v in d.items()
>>> d =
>>> for key in d:... print(key)1234
2.通過collections模組的iterator型別判斷乙個物件是否可迭代,用enumerate函式可以把乙個list變成索引-元素對
>>> from collections import iterable
>>> isinstance('abc', iterable) # str是否可迭代
true
>>> isinstance([1,2,3], iterable) # list是否可迭代
true
>>> isinstance(123, iterable) # 整數是否可迭代
false
>>> for i, value in enumerate(['a', 'b', 'c']):
... print(i, value)
...0 a 1 b
2 c
#注意上面的迴圈裡,同時引用了兩個變數,這在python是很常見的
列表生成式(list comprehensions)
生成[1x1, 2x2, 3x3, ..., 10x10]
#普通的迴圈方法
>>> l =
>>> for x in range(1, 11):
...>>> 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]
#雙重迴圈
>>> [m + n for m in
'abc'
for n in
'xyz']
['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
生成器(generator)
1、第一種方法建立乙個生成器就只需把生成列表的**「」換成「()」,list的函式可以直接列印出來,generator需 要通過next()函式得到下乙個返回值,generator裡面儲存的是演算法,每次呼叫next()函式式就會計算出下乙個元素的值, 知道沒有下乙個就丟擲stopiteration的錯誤,結合迴圈進行列印; 2、第二種方法定義乙個函式其中包括yield關鍵字那麼他就是乙個生成器;generator與函式的執行順序不一樣,generator 是遇到yield就返回,再次執行時從上次返回yield與舉出繼續執行。實際**中很少用next去去值一般是用for迴圈,但是for 是收不到return語句的,所以我們通過捕獲stopiteration錯誤,返回值包含在stopiteration的value中來判斷生成器是 否已經到最後;
>>> g = fib(6)
>>> while true:
...try:
... x = next(g)
... print('g:', x)
... except stopiteration as e:
... print('generator return value:', e.value)
...break
...g: 1
g: 1
g: 2
g: 3
g: 5
g: 8
generator return value: done
迭代器(可以用for迴圈的都可以迭代)
1、iterable是list、tuple、dict、set、str、generator的迭代器;(使用isinstance(type,iterable)函式判斷型別);
2、iterator是generator迭代器(可以呼叫next()函式)(若要把list、dict、str的iterable程式設計iterator使用iter()函式);
這是因為python的iterator物件表示的是乙個資料流,iterator物件可以被next()函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration錯誤。
可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()函式實現按需計算下乙個資料,所以iterator的計算是惰性的,只有在需要返回下乙個資料時它才會計算。
iterator甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。
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高階特性
高階特性的作用在於用最少的 解決問題,越少效率越高 切片的作用於包括集合,元組,字串 0 10 獲取集合或者字串中第 0 個到第 9 個元素組成新資料,切片規則時包左不包右 0 10 2 獲取第 0 個到第 9 個的元素中第 0 2,3,5,7,9 的元素組成新資料 2 從第乙個元素開始跳過乙個元素...