第四:操作列表

4.1 遍歷整個(gè)列表

輸入:

# 4.1 遍歷整個(gè)列表

# for循環(huán)打印魔術(shù)師名單中的所有名字

magicians = ['alice','davide','caroina','duoduo','qianqian']

# 下面一行代碼讓python獲取列表magicians中的第一個(gè)值('alice'),并將其存儲(chǔ)到變量magician中。 接下來python讀取代碼print(magician),接著循環(huán)到開始

for magicianin magicians:

print(magician)

# 4.1.1 深入的研究循環(huán)“讓計(jì)算機(jī)完成重復(fù)工作”

cats? = ['a','b','c']

dogs = ['d','e','f']

items = ['g','h','i']

for catin cats:

??? for dogin dogs:

??????? for itemin items:

????????????? print(cat)

??????????? ? print(dog)

????????????? print(item)

# 4.1.2 在for循環(huán)中執(zhí)行更多的操作

# 在for循環(huán)中對(duì)每個(gè)元素執(zhí)行任何操作

magicians = ['alice','davide','carolina']

for magicianin magicians:

?????? print(magician.title() +",that was a great trick!")

# 4.1.3 在for循環(huán)結(jié)束后執(zhí)行一操作

magicians = ['alice','davide','carolina']

for magicianin magicians:

?????? print(magician.title() +",that was a great trick!")

?????? print("I can't wait to see your next trick, " + magician.title() )

??????? print("Thank you,everyone. Thant was a great magic show!" +"\n")

# PS最后一個(gè)print沒有縮行

magicians = ['alice','davide','carolina']

for magicianin magicians:

????? print(magician.title() +",that was a great trick!")

????? print("I can't wait to see your next trick, " + magician.title() +"\n")

print("Thank you,everyone. Thant was a great magic show!")

PS:使用for循環(huán)處理數(shù)據(jù)是一種對(duì)數(shù)據(jù)集執(zhí)行整體操作的不錯(cuò)的方式。例如,你可以使用for循環(huán)初始化游戲——遍歷角色列表,將每個(gè)角色顯示在屏幕上面。再在循環(huán)后面添加一個(gè)不縮進(jìn)的代碼塊,在屏幕上繪制所有角色后顯示一個(gè)Play Now按鈕。


輸出:

# 4.1 遍歷整個(gè)列表

# for循環(huán)打印魔術(shù)師名單中的所有名字

alice

davide

caroina

duoduo

qianqian

# 4.1.1 深入的研究循環(huán)“讓計(jì)算機(jī)完成重復(fù)工作”

a

d

g

a

d

h

a

d

i

a

e

g

a

e

h

a

e

i

a

f

g

a

f

h

a

f

i

b

d

g

b

d

h

b

d

i

b

e

g

b

e

h

b

e

i

......

# 4.1.2 在for循環(huán)中執(zhí)行更多的操作

# 在for循環(huán)中對(duì)每個(gè)元素執(zhí)行任何操作

Alice,that was a great trick!

Davide,that was a great trick!

Carolina,that was a great trick!

# 4.1.3 在for循環(huán)結(jié)束后執(zhí)行一操作

Alice,that was a great trick!

I can't wait to see your next trick, Alice

Thank you,everyone. Thant was a great magic show!

Davide,that was a great trick!

I can't wait to see your next trick, Davide

Thank you,everyone. Thant was a great magic show!

Carolina,that was a great trick!

I can't wait to see your next trick, Carolina

Thank you,everyone. Thant was a great magic show!

# PS最后一個(gè)print沒有縮行
Alice,that was a great trick!

I can't wait to see your next trick, Alice

Davide,that was a great trick!

I can't wait to see your next trick, Davide

Carolina,that was a great trick!

I can't wait to see your next trick, Carolina


Thank you,everyone. Thant was a great magic show!


?4.2 避免縮進(jìn)錯(cuò)誤

代碼縮進(jìn)讓代碼整潔而結(jié)構(gòu)清晰,在python程序中,你將看到縮進(jìn)成度個(gè)不相同的代碼塊,使我們對(duì)代碼組織結(jié)構(gòu)進(jìn)行認(rèn)識(shí)。

輸入:

# 4.2 避免縮進(jìn)錯(cuò)誤“python根據(jù)縮進(jìn)來判斷代碼與前一個(gè)代碼行的關(guān)系”

# 4.2.1 忘記縮進(jìn)

圖一

# 4.2.2 忘記縮進(jìn)額外的代碼行

# 有時(shí)候循環(huán)正常運(yùn)行并不會(huì)報(bào)錯(cuò),結(jié)果卻是去恰恰相反

magicians = ['alice','davide','carolina']

for magicianin magicians:

print(magician.title() +",that was a great trick!")

print("I cant't waite to see your next trick, " + magician.title() +".\n")

PS:這是一個(gè)邏輯錯(cuò)誤,從語法看這些python代碼合法,但是存在邏輯錯(cuò)誤,不符合預(yù)期。

# 4.2.3 不必要的縮進(jìn)

不小心縮進(jìn)了無須縮進(jìn)的代碼回報(bào)錯(cuò),如圖一所示。

#4.2.4 循環(huán)后不必要的縮進(jìn)

不小心縮進(jìn)了應(yīng)在循環(huán)結(jié)束后執(zhí)行的代碼,這些代碼將針對(duì)每個(gè)列表元素重復(fù)執(zhí)行??赡軙?huì)導(dǎo)致語法錯(cuò)誤,但大多數(shù)會(huì)造成邏輯錯(cuò)誤。不符合預(yù)期。

# 4.2.5 遺漏了冒號(hào)

圖2


輸出:

# 4.2 避免縮進(jìn)錯(cuò)誤“python根據(jù)縮進(jìn)來判斷代碼與前一個(gè)代碼行的關(guān)系”

# 4.2.1 忘記縮進(jìn)

# 4.2.2 忘記縮進(jìn)額外的代碼行

Alice,that was a great trick!

Davide,that was a great trick!

Carolina,that was a great trick!

I cant't waite to see your next trick, Carolina.

PS:這是一個(gè)邏輯錯(cuò)誤,從語法看這些python代碼合法,但是存在邏輯錯(cuò)誤,不符合預(yù)期。

# 4.2.3 不必要的縮進(jìn)

不小心縮進(jìn)了無須縮進(jìn)的代碼回報(bào)錯(cuò),如圖一所示。

#4.2.4 循環(huán)后不必要的縮進(jìn)

不小心縮進(jìn)了應(yīng)在循環(huán)結(jié)束后執(zhí)行的代碼,這些代碼將針對(duì)每個(gè)列表元素重復(fù)執(zhí)行??赡軙?huì)導(dǎo)致語法錯(cuò)誤,但大多數(shù)會(huì)造成邏輯錯(cuò)誤。不符合預(yù)期。

# 4.2.5 遺漏了冒號(hào),如圖2所示


4.3 創(chuàng)建數(shù)字列表


輸入:

# 4.3.1 使用函數(shù)range(),生成一系列數(shù)字。

# 從1開始到4結(jié)束

for valuein range(1,5):

print(value)

# 4.3.2 使用range創(chuàng)建數(shù)字列表# 創(chuàng)建數(shù)字列表使用函數(shù)list()將range()的結(jié)果直接轉(zhuǎn)換為列表。如果將range()作為list()參數(shù),輸出將為一個(gè)數(shù)字列表。

number = list(range(1,6))

print(number)

# 使用函數(shù)range(),指定步長(zhǎng)。例如:打印1-10內(nèi)偶數(shù)# 從2開始數(shù),不斷的+2,直到達(dá)到或者超過終值(11),因此輸出如下:

even_number = list(range(2,11,2))

print(even_number)

# 創(chuàng)建一個(gè)包含前10個(gè)整數(shù)(即1-10)的平方,(**)表示乘方運(yùn)算。

squars = []for value in range(1,11):

squar = value ** 2

#立即將結(jié)果附加到列表squares

squars.append(squar)

print(squars)

# 4.3.3 對(duì)數(shù)字列表執(zhí)行簡(jiǎn)單的統(tǒng)計(jì)計(jì)算

# 找出數(shù)字列表的最大值,最小值和總和

digits =? [1,2,3,4,5,6,7,8,9,0]

print(min(digits))

print(max(digits))

print(sum(digits))

# 4.3.4 列表解析[化繁為簡(jiǎn)]同上1-10的乘方

squares = [value**2 for valuein range(1,11)]

print(squares)


輸出:

# 4.3.1 使用函數(shù)range(),生成一系列數(shù)字。

# 從1開始到4結(jié)束

1

2

3

4

# 4.3.2 使用range創(chuàng)建數(shù)字列表# 創(chuàng)建數(shù)字列表使用函數(shù)list()將range()的結(jié)果直接轉(zhuǎn)換為列表。如果將range()作為list()參數(shù),輸出將為一個(gè)數(shù)字列表。

[1, 2, 3, 4, 5]

# 使用函數(shù)range(),指定步長(zhǎng)。例如:打印1-10內(nèi)偶數(shù)# 從2開始數(shù),不斷的+2,直到達(dá)到或者超過終值(11),因此輸出如下:

[2, 4, 6, 8, 10]

# 創(chuàng)建一個(gè)包含前10個(gè)整數(shù)(即1-10)的平方,(**)表示乘方運(yùn)算。

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 4.3.3 對(duì)數(shù)字列表執(zhí)行簡(jiǎn)單的統(tǒng)計(jì)計(jì)算

# 找出數(shù)字列表的最大值,最小值和總和

0

9

45

# 4.3.4 列表解析[化繁為簡(jiǎn)]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]


4.4 使用列表的一部分


輸入:

錯(cuò)誤圖展示

# 4.4 使用列表的一部分

# 處理的列表部分元素——稱之為pytho中的切片

創(chuàng)建切片,可指定要使用的第一個(gè)元素的索引和最后一個(gè)元素的索引+1

# 4.4.1 切片

players = ['charles','martina','michael','florence','eli']

print(players[0:3])

# 提取2-4個(gè)元素,可將起始索引指定為1 ,并將種植索引指定為4:

players = ['charles','martina','michael','florence','eli']

print(players[1:4])

#由于沒有指定起始索引,python從列表開頭開始提取。

print(players[:4])

#從列表第4或者2個(gè)元素到列表末尾的所有元素。

print(players[4:])

print(players[2:])

#名單最后3名隊(duì)員

print(players[-3:])

# 4.4.2 遍歷切片

players = ['charles', 'martina', 'michael', 'florence', 'eli']

# 遍歷列表的部分元素,可在for循環(huán)中使用切片。在下面的示例中,遍歷前3名隊(duì)員,并打印他們的名字。

print("Here are the first three players on my team:")

for playerin players[:3]:

print(player.title())

# 4.4.3 復(fù)制列表

# 根據(jù)既有列表創(chuàng)建全新的列表。要復(fù)制整個(gè)列表,可創(chuàng)建一個(gè)包含的整個(gè)列表的切片,方法:同時(shí)省略起始索引+終止索引([:])

# 這讓python創(chuàng)建一個(gè)始于第一個(gè)元素終止于最后一個(gè)元素的切片,即復(fù)制整個(gè)列表。

my_foods = ['pizzy','apple','bananas']

friend_foods = my_foods[:]

# 此行代碼是行不通的——friend_foods = my_foods,這樣我們?cè)趦蓚€(gè)列表各添加不同食物,2會(huì)種食物分別出現(xiàn)都出現(xiàn)在兩個(gè)列表,并不是我們想要的結(jié)果。

my_foods.append('cannoli')

friend_foods.append('ice cream')

print("My favorite foods are:")

print(my_foods)

print("\nMy friend's favorite foods are:")

print(friend_foods)


輸出:

# 4.4.1 切片

['charles', 'martina', 'michael']

# 提取2-4個(gè)元素,可將起始索引指定為1 ,并將種植索引指定為4:

['martina', 'michael', 'florence']

['charles', 'martina', 'michael', 'florence']

#從列表第4或者2個(gè)元素到列表末尾的所有元素。

['eli']

['michael', 'florence', 'eli']

#名單最后3名隊(duì)員

['michael', 'florence', 'eli']

# 4.4.2 遍歷切片

# 遍歷列表的部分元素,可在for循環(huán)中使用切片。在下面的示例中,遍歷前3名隊(duì)員,并打印他們的名字。

Here are the first three players on my team:

Charles

Martina

Michael

# 4.4.3 復(fù)制列表

# 根據(jù)既有列表創(chuàng)建全新的列表。要復(fù)制整個(gè)列表,可創(chuàng)建一個(gè)包含的整個(gè)列表的切片,方法:同時(shí)省略起始索引+終止索引([:])

# 這讓python創(chuàng)建一個(gè)始于第一個(gè)元素終止于最后一個(gè)元素的切片,即復(fù)制整個(gè)列表。

My favorite foods are:

['pizzy', 'apple', 'bananas', 'cannoli']

My friend's favorite foods are:

['pizzy', 'apple', 'bananas', 'ice cream']


4.5元祖

列表適合用于存儲(chǔ)在程序運(yùn)行期間可能變化的數(shù)據(jù)集。列表是可以修改的,對(duì)處理網(wǎng)站的用戶列表或者游戲中的角色列表至關(guān)重要。那么,需要?jiǎng)?chuàng)建一系列不可修改的元素,元祖可以滿足這種需求。Python將這種不可修改的值稱為:不可變的,而不可變的列表被稱為:元組。


輸入:

# 4.5.1 定義元組

dimension = (200,50)

print(dimension[0])

print(dimension[1])

# 我們首先定義了元組dimension,為此我們使用了圓括號(hào)而非方括號(hào)。

# 接下來,我們分別打印該元組的各個(gè)元素,使用的語法與訪問列表元素時(shí)使用的語法相同。

# 接下來嘗試修改元組dimension中的一個(gè)元素,看看結(jié)果。

dimension = (200,50)

dimension[0] =250

# 試圖修改第一個(gè)元素的值,python試圖阻止,返回python類型錯(cuò)誤信息。

# 修改元組的操作被禁止,因此Python指出不能給元組的元素賦值:

# 由于試圖修改元祖的操作被禁止,因此python指出不能給元組的元素賦值

# 4.5.2 遍歷元組中的所有值

dimensions = (200,50)

for dimensionin dimensions:

print(dimension)

# 修改元組變量

# 雖然不能修改元組的元素,打呢可以給存儲(chǔ)元組的變量賦值。因此如果要修改前述矩形的尺寸,可重新定義整個(gè)元組。

dimension = (200,50)

print("Original dimensions:")

for dimensionin dimensions:

print(dimension)

dimensions = (400,100)

print("\nModified dimensions:")

for dimensionin dimensions:

print(dimension)

# 將新元組存儲(chǔ)到變量dimensions中,然后打印新尺寸,python不會(huì)報(bào)任何錯(cuò)誤,因?yàn)樵M變量賦值時(shí)合法的。

# 相比列表,元祖是簡(jiǎn)單的數(shù)據(jù)結(jié)構(gòu)。如國(guó)需要存儲(chǔ)的一組值在程序的整個(gè)生命周期內(nèi)都不變,可使用元組。


輸出:

# 4.5.1 定義元組

200

50

# 4.5.2 遍歷元組中的所有值

200

50

Original dimensions:

200

50

Modified dimensions:

400

100


4.6 設(shè)置代碼格式

4.6.1 格式設(shè)置指南

4.6.2 縮進(jìn)

4.6.3 行長(zhǎng)(每行<=80字符)有些小組將最大行長(zhǎng)社設(shè)置為99行

4.6.4 空行

將程序不同部分分開,可使用空行。

4.6.5 其他格式設(shè)置指南



參考人民郵電出版社《Python 編程從入門到實(shí)踐》【美】Eric Matthes 著 袁國(guó)忠 譯

歡迎吐槽!?。?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容