切片
在索引查詢中使用 : 查詢就是切片的標(biāo)志性用法
#聲明一個(gè)list
>>> L = list(range(100))
>>> L
[0, 1, 2, 3, ..., 99]
#0代表索引開(kāi)始的位置,3代表索引結(jié)束的位置
#缺省狀態(tài)下节预, **:** 前面是0叶摄,后面是list最后一個(gè)索引
#如L[:3](作用相同)看铆,L[1:](跳過(guò)第一個(gè))
>>> L[0:3]
[0, 1, 2]
- 查詢索引可以是負(fù)數(shù)算灸,負(fù)數(shù)代表倒著查詢
- 兩個(gè) : 時(shí),最后面的數(shù)字表示跳過(guò)個(gè)數(shù)
- 原數(shù)據(jù)可以是list tuple贯莺,可以是字符串
- 原數(shù)據(jù)是什么類型去扣,切片后仍然是該類型
#讀取后10位
>>> L[-10:]
[90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
#前10個(gè)柱衔,每?jī)蓚€(gè)讀取一個(gè)
>>> L[:10:2]
[0, 2, 4, 6, 8]
迭代
通過(guò)for...in來(lái)完成的就是迭代
- dict迭代的是key。如果要迭代value愉棱,可以用for value in d.values()唆铐,如果要同時(shí)迭代key和value,可以用for k, v in d.items()奔滑。
- 使用enumerate函數(shù)可以把一個(gè)list變成索引-元素對(duì)
#測(cè)試對(duì)象是否允許迭代
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
#類型轉(zhuǎn)換使用迭代
>>> for i, value in enumerate(['A', 'B']):
... print(i, value)
...
0 A
1 B
列表生成式
將輸出與for寫(xiě)在一行的形式艾岂,生成結(jié)果不改變?cè)屑蠑?shù)據(jù),自動(dòng)生成轉(zhuǎn)換過(guò)渡集合
#有判斷的循環(huán)朋其,轉(zhuǎn)換成小寫(xiě)
>>>L1 = ['Hello', 'World', 18, 'Apple', None]
>>>[s.lower() for s in L1 if isinstance(s, str)]
['hello', 'world', 'apple']
#嵌套循環(huán)
>>> [m + n for m in 'ABC' for n in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
#字典
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
生成器
- generator保存的是算法王浴,每次調(diào)用next(g),就計(jì)算出g的下一個(gè)元素的值梅猿,沒(méi)有元素的時(shí)候拋出StopIteration的錯(cuò)誤氓辣。
- 使用了關(guān)鍵字yield,程序遇到它就停止袱蚓,再次執(zhí)行next函數(shù)時(shí)钞啸,會(huì)從上次停止的位置繼續(xù)。
#b的值直接賦給了a喇潘,a+b的值直接賦給了b体斩,沒(méi)有臨時(shí)變量完成了交換
a, b = b, a + b
#這樣的格式用于捕獲直接使用next函數(shù)導(dǎo)致的異常值
try:
pass
except StopIteration as e:
raise #ex.value
else:
pass
finally:
pass
#楊輝三角
def triangles():
L = [1]
while True:
yield L[:]
L.append(0)
#打印出修改結(jié)果前的數(shù)據(jù),便于理解列表生成式
#print('循環(huán)修改前',L)
L = [L[i - 1] + L[i] for i in range(len(L))]
#調(diào)用楊輝三角
for t in triangles():
print(t)
迭代器
- 迭代對(duì)象 Iterable颖低,是有限的數(shù)據(jù)絮吵,可以for循環(huán)
- 迭代器 Iterator,是無(wú)限大算法忱屑,可以next取值
- 將迭代對(duì)象 Iterable→迭代器 Iterator 使用iter()函數(shù)