国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python學習筆記06_高級特性

2019-11-11 07:07:43
字體:
來源:轉載
供稿:網友

切片

L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3.如果第一個索引是0,還可以省略L[:3]L[-2:],表示倒數第二個元素到末尾。L[-2:-1],表示倒數第二個元素到倒數第一個元素,但不包括倒數第一個元素。L[:10:2],前10個數,每兩個取一個。L[::5],所有數,每5個取一個。L[:],原樣復制一個list。tuple切片,唯一區別是tuple不可變,操作的結果仍是tuple。 <<< (0,1,2,3,4,5)[:3] (0,1,2) 字符串也可以看成是一種list,每個元素就是一個字符。 <<< 'ABCDEFG'[:3] 'ABC' <<< 'ABCDEFG'[::2] 'ACEG'

迭代

dict默認迭代key,for key in d,如果要迭代value,可以用for value in d.values(),如果要同時迭代key和value,可以用for k,v in d.items()for循環,可作用于一個可迭代對象。 <<< from collections import Iterable <<< isinstance('abc',Iterable) # str是否可迭代 True <<< isinstance([1,2,3],Iterable) # list是否可迭代 True <<< isinstance(123,Iterable) # 整數是否可迭代 False list的下標循環,Python內置的enumerate函數可以把一個list變成索引-元素對。 <<< for i, value in enumerate(['A','B','C']): PRint(i,value)

列表生成式List Comprehensions

生成list[1,2,3,4,5,6,7,8,9,10]可以用list(range(1,11))

生成[1×1,2×2,3×3,...,10×10]

<<< L = []<<< for x in range(1,11): L.append(x * x)<<< [x * x for x in range(1,11)]生成偶數的平方 <<< x * x for x in range(1,11) if x % 2 == 0 生成全排列 <<< m + n for m in 'ABC' for n in 'XYZ' 列出當前目錄下的所有文件和目錄名 <<< import os # 導入os模塊 <<< [d for d in os.listdir('.')] # os.listdir可以列出文件和目錄

使用兩個變量來生成list

<<< d = {'x':'A', 'y':'B', 'z':'C'}<<< [k + '=' + v for k, v in d.items()]把一個list中所有的字符串變成小寫,如果list中既包含字符串,又包含整數,使用內建的isinstance()函數可以判斷一個變量是不是字符串。 <<< L1 = ['Hello','World',18,'Apple',None] <<< L2 = [s.lower() for s in L1 if isinstance(s, str))] print(L2)

生成器generator

創建簡單generator,用生成器 <<< L = [x * x for x in range(10)] # L是一個list <<< g = (x * x for x in range(10)) # g是一個generator <<< next(g) # 獲得generator的下一個返回值 <<< for n in g: print(n) # generator是可迭代對象

創建復雜generator,用函數實現

# 創建非波拉契數列(Fibonacci)def fib(max): n, a, b = 0, 0, 1 while n<max: yield b a, b = b, a+b n = n + 1 return 'done'# 拿到generator的rerurn語句的返回值<<< g = fib(6)<<< while True: try: x = next(g) print('g:', x) except StopIteration as e: print('Generator return value:', e.value) break

迭代器

可直接作用于for循環的數據類型:一類是集合數據類型,如list、tuple、dict、set、str等;一類是generator,包括生成器和帶yield的generator function。可直接作用于for循環的對象統稱為可迭代對象:Iterable。 <<< from collection import Iterable <<< isinstance([], Iterable) True <<< isinstance({}, Iterable) True <<< isinstance('abc', Iterable) True <<< isinstance((x for x in range(10)), Iterable) True <<< isinstance(100, Iterable) False 可以被next()函數調用并不斷返回下一個值的對象成為迭代器:Iterator。 <<< from collections import Iterator <<< isinstance((x for x in range(10)), Iterator) True <<< isinstance([], Iterator) False <<< isinstance({}, Iterator) False <<< isinstance('abc', Iterator) False 生成器都是Iterator對象,但list、dict、str雖然是Iterable對象,卻不是Iterator。把list、dict、str等Iterable變成Iterator可以使用iter()函數。 <<< isinstance(iter([]), Iterator) True <<< isinstance(iter('abc'), Iterator) True Python的Iterator對象表示的是一個數據流,Iterator對象可以被next()函數調用并不斷返回下一個數據,直到沒有數據時拋出StopIteration錯誤。Iterator可以表示一個無限大的數據流,如全體自然數,而用list是不可能存儲全體自然數。

小結

凡是可作用于for循環的對象都是Iterable類型。凡是可作用于next()函數的對象都是Iterator類型,它們表示一個惰性計算的序列。集合數據類型如list、dict、str等死Iterable但不是Iterator,但可以通過iter()函數獲得一個Iterator對象。

Python的for循環本質上就是通過不斷調用next()函數實現的。

for x in [1, 2, 3, 4, 5] pass# 首先獲得Iterator對象it = iter([1, 2, 3, 4, 5])# 循環while True: try: # 獲得下一個值 x = next(it) except StopIteration: # 遇到StopIteration就退出循環 break
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贡山| 嘉善县| 北川| 青铜峡市| 汕头市| 泰州市| 营口市| 惠水县| 海门市| 遂溪县| 林周县| 苏州市| 英山县| 两当县| 壶关县| 拜泉县| 枣庄市| 华安县| 辽宁省| 永吉县| 龙川县| 新和县| 凤山市| 项城市| 贡嘎县| 阿瓦提县| 嵊州市| 淅川县| 南部县| 天长市| 天门市| 当涂县| 安图县| 桐乡市| 延长县| 麟游县| 行唐县| 桐城市| 句容市| 奈曼旗| 额尔古纳市|