操作列表
遍歷列表(可迭代的--Iterable)
for
循環(huán)
- 如何判斷一個(gè)對(duì)象是可迭代對(duì)象呢场晶?方法是通過(guò)
collections
模塊的Iterable
類(lèi)型判斷:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整數(shù)是否可迭代
False
- Python內(nèi)置的
enumerate
函數(shù)可以把一個(gè)list變成索引-元素對(duì),這樣就可以在for循環(huán)中同時(shí)迭代索引和元素本身:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
- LOOP
>>> magicians = ['alice', 'david', 'carolina']
>>> for magician in magicians:
print(magician)
alice
david
carolina
- 循環(huán)很重要,因?yàn)樗亲層?jì)算機(jī)自動(dòng)完成重復(fù)工作的常見(jiàn)方式之一
- 對(duì)列表中的每個(gè)元素母谎,都將執(zhí)行循環(huán)指定的步驟亡电,而不管列表包含多少個(gè)元素
- 使用單數(shù)和復(fù)數(shù)式名稱碟刺,可幫助你判斷代碼段處理的是單個(gè)列表元素還是整個(gè)列表
- 換行符
\n
跋核,插入一個(gè)空行 - 在
for
循環(huán)后面,沒(méi)有縮進(jìn)的代碼都只執(zhí)行一次丧失,而不會(huì)重復(fù)執(zhí)行 - 忘記縮進(jìn)出現(xiàn)的提醒:
expected an indented block
-
for
語(yǔ)句末尾的冒號(hào)告訴Python豺妓,下一行是循環(huán)的第一行 - 如果你不小心遺漏了冒號(hào),將導(dǎo)致語(yǔ)法錯(cuò)誤布讹。
函數(shù)range()
- 函數(shù)
range()
讓你能夠輕松地生成一系列的數(shù)字 -
range(0,5)
只是打印數(shù)字0~4琳拭,這是在編程語(yǔ)言中經(jīng)常看到的差一行為的結(jié)果
如果要打印數(shù)字0~5描验,可用range(0,6)
>>> for i in range(0,5):
print(i)
0
1
2
3
4
'''
擴(kuò)展模式白嘁,else語(yǔ)句在for循環(huán)正常執(zhí)行之后才執(zhí)行并結(jié)束
for <循環(huán)變量> in <遍歷結(jié)構(gòu)>:
<語(yǔ)句塊1>
else:
<語(yǔ)句塊2>
'''
for s in "PY":
print("循環(huán)執(zhí)行中: " + s)
else:
s = "循環(huán)正常結(jié)束"
print(s)
>>>
循環(huán)執(zhí)行中: P
循環(huán)執(zhí)行中: Y
循環(huán)正常結(jié)束
- 創(chuàng)建數(shù)字列表,即
range()
作為list()
的參數(shù)膘流,輸出將為一個(gè)數(shù)字列表权薯。
>>> number = list(range(1,6))
>>> print(number)
[1, 2, 3, 4, 5]
- 使用函數(shù)
range()
時(shí),還可指定步長(zhǎng)(range()
的一個(gè)參數(shù))
>>> number_2 = list(range(2,11,2))
>>> print(number_2)
[2, 4, 6, 8, 10]
對(duì)數(shù)字列表執(zhí)行簡(jiǎn)單的統(tǒng)計(jì)計(jì)算
- 有幾個(gè)專門(mén)用于處理數(shù)字列表的Python函數(shù)
>>> digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
>>> min(digits)
0
>>> max(digits)
9
>>> sum(digits)
45
切片(處理列表的部分元素)
- 創(chuàng)建切片睡扬,可指定要使用的第一個(gè)元素和最后一個(gè)元素的索引。
[0:3]
表示黍析,從索引0
開(kāi)始取卖怜,直到索引3
為止,但不包括索引3
阐枣。即索引0
马靠,1
,2
蔼两,正好是3個(gè)元素甩鳄。 - 如果第一個(gè)索引是0,還可以省略
>>> players = ['charles', 'martina', 'michael', 'florence', 'eli']
# 未省略0
>>> print(players[0:3])
['charles', 'martina', 'michael']
# 省略0
>>> print(players[ :3])
['charles', 'martina', 'michael']
- 使用
[2: ]
额划,始于第二個(gè)元素妙啃,終于列表末尾 - 無(wú)論列表多長(zhǎng),這種語(yǔ)法都能夠讓你輸出從特定位置到列表末尾的所有元素
- 類(lèi)似的,既然Python支持
players[-1]
取倒數(shù)第一個(gè)元素揖赴,那么它同樣支持倒數(shù)切片
>>> players[-1]
'eli'
>>> players[-2:]
['florence', 'eli']
>>> players[-2:-1]
['florence']
>>> players[-4]
'martina'
- tuple也是一種list馆匿,唯一區(qū)別是tuple不可變。因此燥滑,tuple也可以用切片操作渐北,只是操作的結(jié)果仍是tuple
- 字符串
'xxx'
也可以看成是一種list,每個(gè)元素就是一個(gè)字符铭拧。因此赃蛛,字符串也可以用切片操作,只是操作結(jié)果仍是字符串
遍歷切片
- 遍歷列表的部分元素搀菩,可在
for
循環(huán)中使用切片
>>> players = ['charles', 'martina', 'michael', 'florence', 'eli']
>>> for player in players[:3]:
print(player.title())
Charles
Martina
Michael
復(fù)制列表
- 要復(fù)制列表呕臂,可創(chuàng)建一個(gè)包含整個(gè)列表的切片,方法是同時(shí)省略起始索引和終止索引([:] )秕磷。這讓Python創(chuàng)建一個(gè)始于第一個(gè)元素诵闭,終止于最后一個(gè)元素的切片,即復(fù)制整個(gè) 列表澎嚣。
元組(tuple)——(‘name’,“l(fā)ife”,2,3)
列表是可以修改的疏尿,而不可變的列表被稱為元組
定義元組
- 元組看起來(lái)猶如列表,卻是使用圓括號(hào)而不是方括號(hào)來(lái)標(biāo)識(shí)易桃。
- 定義元組后褥琐,就可以使用索引來(lái)訪問(wèn)其元素,就像訪問(wèn)列表元素一樣
- 像列表一樣晤郑,也可以使用
for
循環(huán)來(lái)遍歷元組中的所有值 - 雖然不能修改元組的元素敌呈,但可以給存儲(chǔ)元組的變量賦值。因此造寝,如果要修改前述矩形的尺寸磕洪,可重新定義整個(gè)元組
>>> dimensions = (200, 50)
>>> for dimension in dimensions:
print(dimension)
200
50
>>> dimensions = (400, 100) # 重新定義一個(gè)新的元組
>>> for dimension in dimensions:
print(dimension)
400
100
- 如果需要存儲(chǔ)的一組值在程序的整個(gè)生命周期內(nèi)都不變,可使用元組诫龙。
if
語(yǔ)句
條件測(cè)試
每條if 語(yǔ)句的核心都是一個(gè)值為
True
或False
的表達(dá)式析显,這種表達(dá)式被稱為條件測(cè)試
- 相等運(yùn)算符 (==)
檢查相等時(shí)無(wú)需考慮大小寫(xiě)
- 不相等運(yùn)算符 (!=)
條件語(yǔ)句中可包含各種數(shù)學(xué)比較,如小于签赃、小于等于谷异、大于、大于锦聊。
檢查多個(gè)條件
- 需要在兩個(gè)條件都為T(mén)rue 時(shí)才執(zhí)行相應(yīng)的操作:可使用關(guān)鍵字
and
將兩個(gè)條件測(cè)試合而為一歹嘹;如果每個(gè)測(cè)試都通過(guò)了,整個(gè)表達(dá)式就為True
孔庭;如果有一個(gè)測(cè)試沒(méi)有通過(guò)尺上,整個(gè)表達(dá)式就 為False
。
>>> age_0 = 22
>>> age_1 = 18
>>> (age_0>= 21) and (age_1>=21)
False
>>> (age_0>= 21) and (age_1>=10)
True
- 而有時(shí)候只要求一個(gè)條件為T(mén)rue 時(shí)就執(zhí)行相應(yīng)的操作:關(guān)鍵字
or
也能夠讓你檢查多個(gè)條件,但只要至少需要一個(gè)條件滿足尖昏,就能通過(guò)整個(gè)測(cè)試仰税。僅當(dāng)兩個(gè)測(cè)試都沒(méi)有通過(guò)時(shí),才為False
>>> age_0 = 22
>>> age_1 = 18
>>> (age_0 >= 21) or (age_1 >= 21)
True # 僅一個(gè)條件滿足
>>> age_0 = 18
>>> (age_0 >= 21) or (age_1 >= 21)
False # 兩個(gè)都不滿足
檢查特定值是否包含在列表中
- 要判斷特定的值是否已包含在列表中抽诉,可使用關(guān)鍵字
in
>>> requested_toppings = ['mushrooms', 'onions', 'pineapple']
>>> 'mushrooms' in requested_toppings
True
>>> 'pepperoni' in requested_toppings
False
- 確定特定的值未包含在列表中陨簇,可使用關(guān)鍵字
not in
最簡(jiǎn)單的if 語(yǔ)句只有一個(gè)測(cè)試和一個(gè)操作
if-else
語(yǔ)句
在條件測(cè)試通過(guò)了時(shí)執(zhí)行一個(gè)操作,并在沒(méi)有通過(guò)時(shí)執(zhí)行另一個(gè)操作迹淌。
-
if-elif-else
結(jié)構(gòu) - 僅適合用于只有一個(gè)條件滿足的情況
檢查超過(guò)兩個(gè)條件的情況河绽,往往其中間條件是 由
elif
引導(dǎo)的
可使用多個(gè)
elif
代碼塊當(dāng)然也可以省略
else
代碼塊
如果你只想執(zhí)行一個(gè)代碼塊,就使用
if-elif-else
結(jié)構(gòu)唉窃;如果要運(yùn)行多個(gè)代碼塊耙饰,就使用一系列獨(dú)立的if
語(yǔ)句。