Python高階特性

2021-07-27 01:43:13 字數 3164 閱讀 3308

切片(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 從第乙個元素開始跳過乙個元素...