《自學(xué)學(xué)門(mén)手藝》讀書(shū)筆記14

? ? ? 上個(gè)月11月21日完成了字符串章節(jié)的閱讀瓢阴,心中非常歡喜夏志,連滾帶爬總算翻過(guò)了一道坎,想必接下來(lái)的內(nèi)容能順利些童漩,哪成想要讀完容器這章弄贿,也勢(shì)必要再費(fèi)一番周折。消極的話到此為止矫膨,還是繼續(xù)正文摘要吧差凹。

本章主講內(nèi)容是數(shù)據(jù)容器(Container)期奔,包括字符串、由 range() 函數(shù)生成的等差數(shù)列危尿、列表(List)呐萌、元組(Tuple)、集合(Set)谊娇、字典(Dictionary)肺孤。根據(jù)不同的分類方法,這些容器又分為可變?nèi)萜鳎∕utable)和不可變?nèi)萜鳎↖mmutable)济欢∏裕可變的有列表、集合船逮、字典顾腊;不可變的有字符串、range() 生成的等差數(shù)列挖胃、元組杂靶。集合,又分為 Set 和 Frozen Set酱鸭;其中吗垮,Set 是可變的,F(xiàn)rozen Set 是不可變的凹髓。字符串烁登、由 range() 函數(shù)生成的等差數(shù)列、列表蔚舀、元組是有序類型(Sequence Type)饵沧,而集合與字典是無(wú)序的。另外赌躺,集合沒(méi)有重合元素狼牺。分類匯總圖表如下:

容器分類

迭代

數(shù)據(jù)容器里的元素是可以被迭代的(Iterable),為便于處理礼患,它們其中包含的元素是钥,可以被逐個(gè)訪問(wèn)。由于數(shù)據(jù)容器的可迭代性缅叠,加上操作符 in悄泥,在 Python 語(yǔ)言里寫(xiě)循環(huán)格外容易且方便(以字符串這個(gè)字符的容器作為例子):

for c in 'Python':
? print(c)
P
y
t
h
o
n

在 Python 中,簡(jiǎn)單的 for 循環(huán)肤粱,只需要指定一個(gè)次數(shù)就可以了弹囚,因?yàn)橛?range() 這個(gè)函數(shù):

for i in range(10):
? print(i)
0
1
2
3
4
5
6
7
8
9

Python 也不只有 for 循環(huán),還有 while 循環(huán)狼犯,在必要的時(shí)候可以寫(xiě)復(fù)雜的計(jì)數(shù)器余寥。

列表(List)

列表和字符串一樣领铐,是個(gè)有序類型(Sequence Type)的容器,其中包含著有索引編號(hào)的元素宋舷。列表中的元素可以是不同類型绪撵。

列表的生成

生成一個(gè)列表,有以下四種方式:

a_list = []
b_list = [1, 2, 3]
list(), or list(iterable)? ? ? ? ? ? # 這是 Type Casting
[(expression with x) for x in iterable]

列表的操作符

列表的操作符和字符串一樣祝蝠,因?yàn)樗鼈兌际怯行蛉萜饕粽A斜淼牟僮鞣校?/p>

拼接:+(與字符串不一樣的地方是,不能用空格 ' ' 了)
復(fù)制:*
邏輯運(yùn)算:in 和 not in绎狭,<细溅、<=、>儡嘶、>=喇聊、!=、==

兩個(gè)列表可以被比較蹦狂,即誓篱,可以進(jìn)行邏輯運(yùn)算;比較方式也跟字符串一樣凯楔,從兩個(gè)列表各自的第一個(gè)元素開(kāi)始逐個(gè)比較窜骄,“一旦決出勝負(fù)馬上停止”

根據(jù)索引提取列表元素

列表當(dāng)然也可以根據(jù)索引操作,但由于列表是可變序列摆屯,所以邻遏,不僅可以提取,還可以刪除虐骑,甚至替換准验。

運(yùn)行下列語(yǔ)句:

import random
n = 3
a_list = [random.randrange(65, 91) for i in range(n)]
b_list = [chr(random.randrange(65, 91)) for i in range(n)]
print(a_list)
c_list = a_list + b_list + a_list * 2
print(c_list)

print()
# 根據(jù)索引提取(Slicing)
print(c_list[3])? ? ? ? # 返回索引值為 3 的元素值
print(c_list[:])? ? ? ? # 相當(dāng)于 c_list富弦,返回整個(gè)列表
print(c_list[5:])? ? ? # 從索引為 5 的值開(kāi)始直到末尾
print(c_list[:3])? ? ? # 從索引 0 開(kāi)始沟娱,直到索引 3 之前(不包括 3)
print(c_list[2:6])? ? ? # 從索引 2 開(kāi)始,直到索引 6 之前(不包括 6)

print()
# 根據(jù)索引刪除
del c_list[3]
print(c_list)? ? ? ? ? # del 是個(gè)命令腕柜,del c_list[3] 是一個(gè)語(yǔ)句;不能這么寫(xiě):print(del c_list[3])
del c_list[5:8]
print(c_list)

print()
# 根據(jù)索引替換
c_list[1:5:2] = ['a', 2]? # s[start:stop:step] = t矫废,跟 range 的三個(gè)參數(shù)類似盏缤;
? ? ? ? ? ? ? ? ? ? ? ? # len(t) = len([start:stop:step]) 必須為真

輸出結(jié)果如下:

[77, 66, 79]
[77, 66, 79, 'L', 'Z', 'R', 77, 66, 79, 77, 66, 79]

L
[77, 66, 79, 'L', 'Z', 'R', 77, 66, 79, 77, 66, 79]
['R', 77, 66, 79, 77, 66, 79]
[77, 66, 79]
[79, 'L', 'Z', 'R']

[77, 66, 79, 'Z', 'R', 77, 66, 79, 77, 66, 79]
[77, 66, 79, 'Z', 'R', 77, 66, 79]

[77, 'a', 79, 2, 'R', 77, 66, 79]

需要注意,列表(List)是可變序列,而字符串(str)是不可變序列蓖扑,對(duì)字符串來(lái)說(shuō)唉铜,雖然也可以根據(jù)索引提取,但沒(méi)辦法根據(jù)索引刪除或者替換律杠。

字符串常量(String Literal)是不可變有序容器潭流,雖然字符串也有一些 Methods 可用竞惋,但那些 Methods 都不改變它們自身,而是在操作后返回一個(gè)值給另外一個(gè)變量灰嫉。而對(duì)于列表這種可變?nèi)萜鞑鹜穑覀兛梢詫?duì)它進(jìn)行操作,結(jié)果是它本身被改變了讼撒。見(jiàn)如下示例:

s = 'Python'
L = list(s)
print(s)
print(L)
del L[2]
print(L) # 用 del 對(duì) L 操作之后浑厚,L 本身少了 1 個(gè)元素

返回結(jié)果

Python
['P', 'y', 't', 'h', 'o', 'n']
['P', 'y', 'h', 'o', 'n']

列表可用的內(nèi)建函數(shù)

列表和字符串都是容器,它們可使用的內(nèi)建函數(shù)也其實(shí)都是一樣的:

len()
max()
min()

示例:

import random
n = 3

# 生成 3 個(gè)隨機(jī)數(shù)根盒,構(gòu)成一個(gè)列表
a_list = [random.randrange(65, 91) for i in range(n)]
b_list = [chr(random.randrange(65, 91)) for i in range(n)]
print(a_list)
print(b_list)

# 列表可以使用操作符 + 和*
c_list = a_list + b_list + a_list * 2
print(c_list)

a_list *= 3
print(a_list)

# 內(nèi)建函數(shù)操作 len()钳幅、max()、min()
print(len(c_list))
print(max(b_list)) # 內(nèi)建函數(shù)內(nèi)部做了異常處理炎滞,可以比較字符和數(shù)字 —— 初學(xué)者最討厭這種事情了……
print(min(b_list)) # 注意敢艰,max() 和 min() 應(yīng)用的是 b_list, len() 應(yīng)用的是 c_list —— 請(qǐng)自行找到對(duì)應(yīng)的 list 進(jìn)行分析。

print('X' not in b_list)

返回結(jié)果

[89, 84, 85]
['X', 'B', 'X']
[89, 84, 85, 'X', 'B', 'X', 89, 84, 85, 89, 84, 85]
[89, 84, 85, 89, 84, 85, 89, 84, 85]
12
X
B
False

Methods

字符串常量和 range() 都是不可變的(Immutable)册赛;而列表則是可變類型(Mutable type)盖矫,所以,它最起碼可以被排序 —— 使用 sort() method ,如果列表中的元素全都是由字符串構(gòu)成的击奶,當(dāng)然也可以排序.

注意:被比較的元素應(yīng)該是同一類型 ,不是由同一種數(shù)據(jù)類型元素構(gòu)成的列表辈双,不能使用 sort() Method。

可變序列還有一系列可用的 Methods:a.append()柜砾,a.clear()湃望,a.copy(),a.extend(t)痰驱,a.insert(i证芭,x),a.pop([i])担映,a.remove(x)废士,a.reverse()
示例:

import random
n = 3
a_list = [random.randrange(65, 91) for i in range(n)]
b_list = [chr(random.randrange(65, 91)) for i in range(n)]
print(a_list)
c_list = a_list + b_list + a_list * 2
print(c_list)

# 在末尾追加一個(gè)元素
c_list.append('100')
print(c_list)

# 清空序列
print()
print(a_list)
a_list.clear()
print(a_list)

print()
# 拷貝一個(gè)列表
d_list = c_list.copy()
print(d_list)
del d_list[6:8]
print(d_list)
print(c_list)? ? ? ? ? ? # 對(duì)一個(gè)拷貝操作,不會(huì)更改 “原件”

print()
# 演示拷貝 .copy() 與賦值 = 的不同
e_list = d_list
del e_list[6:8]
print(e_list)
print(d_list)? ? ? ? ? ? # 對(duì) e_list 操作蝇完,相當(dāng)于對(duì) d_list 操作

# 在末尾追加一個(gè)列表
print()
print(a_list)
a_list.extend(c_list)? ? ? # 相當(dāng)于 a_list += c_list
print(a_list)

# 在某索引位置插入一個(gè)元素
print()
print(a_list)
a_list.insert(1, 'example')? # 在索引 1 的位置插入 'example'
a_list.insert(3, 'example')? # 在索引 3 的位置插入 'example'官硝;
print(a_list)

# 排序

# a_list.sort() 這一句會(huì)出錯(cuò),因?yàn)楫?dāng)前列表中的元素短蜕,是 int 和 str 混合的氢架。

print()
print(a_list)
a_list.reverse()
print(a_list)
x = a_list.reverse() # reverse() 只對(duì)當(dāng)前序列操作,并不返回一個(gè)逆序列表朋魔;返回值是 None
print(x)

返回結(jié)果

[90, 88, 73]
[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73]
[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']

[90, 88, 73]
[]

[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']
[90, 88, 73, 'T', 'N', 'Y', 73, 90, 88, 73, '100']
[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']

[90, 88, 73, 'T', 'N', 'Y', 88, 73, '100']
[90, 88, 73, 'T', 'N', 'Y', 88, 73, '100']

[]
[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']

[90, 88, 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']
[90, 'example', 88, 'example', 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']

[90, 'example', 88, 'example', 73, 'T', 'N', 'Y', 90, 88, 73, 90, 88, 73, '100']
['100', 73, 88, 90, 73, 88, 90, 'Y', 'N', 'T', 73, 'example', 88, 'example', 90]
None

命令del岖研,Method a.pop([i])和a.remove(x)都與刪除單個(gè)元素相關(guān),請(qǐng)注意它們之間的區(qū)別警检。

import random
n = 3
a_list = [random.randrange(65, 91) for i in range(n)]
print(a_list)

# 插入
print()
a_list.insert(1, 'example')? # 在索引 1 的位置插入 'example'

# 刪除
print()
print(a_list)
a_list.remove('example')? ? ? # 去除 'example' 這個(gè)元素孙援,如果有多個(gè) 'example'害淤,只刪除第一個(gè)
print(a_list)

# pop() 刪除并返回被刪除的值

print()
print(a_list)
p = a_list.pop(2)? ? ? # 去除索引為 2 的元素,且返回元素的值拓售,賦值給 p
print(a_list)
print(p)

# pop() 與 del窥摄,或者 remove() 的區(qū)別
print()
a_list.insert(2, 'example')
a_list.insert(2, 'example')
print(a_list)
del a_list[2]
print(a_list)

print()
print(a_list.remove('example')) # a_list.remove() 這個(gè) Method 的返回值是 None
print(a_list)

返回結(jié)果:

[88, 84, 69]

[88, 'example', 84, 69]
[88, 84, 69]

[88, 84, 69]
[88, 84]
69

[88, 84, 'example', 'example']
[88, 84, 'example']

None
[88, 84]

容器特性總結(jié)

路漫漫其修遠(yuǎn)兮,唯有耐心隨其愿邻辉。加油溪王!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市值骇,隨后出現(xiàn)的幾起案子莹菱,更是在濱河造成了極大的恐慌,老刑警劉巖吱瘩,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件道伟,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡使碾,警方通過(guò)查閱死者的電腦和手機(jī)蜜徽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)票摇,“玉大人拘鞋,你說(shuō)我怎么就攤上這事∈该牛” “怎么了盆色?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)祟剔。 經(jīng)常有香客問(wèn)我隔躲,道長(zhǎng),這世上最難降的妖魔是什么物延? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任宣旱,我火速辦了婚禮,結(jié)果婚禮上叛薯,老公的妹妹穿的比我還像新娘浑吟。我一直安慰自己,他們只是感情好案训,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布买置。 她就那樣靜靜地躺著,像睡著了一般强霎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蓉冈,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天城舞,我揣著相機(jī)與錄音轩触,去河邊找鬼。 笑死家夺,一個(gè)胖子當(dāng)著我的面吹牛脱柱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播拉馋,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼榨为,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了煌茴?” 一聲冷哼從身側(cè)響起随闺,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蔓腐,沒(méi)想到半個(gè)月后矩乐,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡回论,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年散罕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傀蓉。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡欧漱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出葬燎,到底是詐尸還是另有隱情误甚,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布萨蚕,位于F島的核電站靶草,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏岳遥。R本人自食惡果不足惜奕翔,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浩蓉。 院中可真熱鬧派继,春花似錦、人聲如沸捻艳。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)认轨。三九已至绅络,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背恩急。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工杉畜, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人衷恭。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓此叠,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親随珠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子灭袁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. Python的hello-world: print ("Hello, Python!")、 完了 搖就完事兒...
    LunarShade閱讀 1,403評(píng)論 0 0
  • 8月22日-----字符串相關(guān) 2-3 個(gè)性化消息: 將用戶的姓名存到一個(gè)變量中窗看,并向該用戶顯示一條消息茸歧。顯示的消...
    future_d180閱讀 979評(píng)論 0 1
  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚(yú)閱讀 9,012評(píng)論 0 13
  • 物質(zhì)文明看廚房举娩,精神文明看茅房。農(nóng)村廁所革命已經(jīng)開(kāi)展构罗,許多地方的農(nóng)村環(huán)境發(fā)生了巨大的改變铜涉,這都得益于國(guó)家的好政策。...
    鋼結(jié)構(gòu)車(chē)間閱讀 356評(píng)論 0 0
  • 我從廚房端著菜出來(lái)遂唧,看到在客廳里的孩子芙代,他穿著小背心,露著肉肉的胳膊盖彭,現(xiàn)在他正處在萌萌的兒童未期纹烹,開(kāi)始有自己的主見(jiàn)...
    北布嬌閱讀 245評(píng)論 0 2