Python基礎(chǔ)數(shù)據(jù)類(lèi)型與使用

1.文本類(lèi)型:字符串(str)

字符串 就是一系列字符弊攘。在Python中眼坏,用引號(hào)括起的都是字符串型豁,其中的引號(hào)可以是單引號(hào)酬凳,也可以是雙引號(hào)谋竖,如下所示:

"this is  a string"
'this is a string'
'I told my friend, "Python is my favorite language!"'
"The language 'Python' is named after Monty Python, not the snake."
"One of Python's strengths is its diverse and supportive community."

1.1修改字符串的字母大小寫(xiě)

對(duì)于字符串红柱,可執(zhí)行的最簡(jiǎn)單的操作之一是修改其中的單詞的大小寫(xiě)。請(qǐng)看下面的代碼蓖乘,并嘗試判斷其作用:

name='my name is python!'
print(name.title())

在這個(gè)示例中锤悄,小寫(xiě)的字符串"my name is python!" 存儲(chǔ)到了變量name 中。在print() 語(yǔ)句中嘉抒,方法title() 出現(xiàn)在這個(gè)變量的后面零聚。方法 是Python可對(duì)數(shù)據(jù)執(zhí)行的操作。在name.title() 中,name 后面的句點(diǎn)(. )讓Python對(duì)變量name 執(zhí)行方法title() 指定的操作隶症。每個(gè)方法后面都跟著一對(duì)括號(hào)政模,這是因?yàn)榉椒ㄍǔP枰~外的信息來(lái)完成
其工作。這種信息是在括號(hào)內(nèi)提供的蚂会。函數(shù)title() 不需要額外的信息淋样,因此它后面的括號(hào)是空的。
title() 以首字母大寫(xiě)的方式顯示每個(gè)單詞胁住,即將每個(gè)單詞的首字母都改為大寫(xiě)趁猴。這很有用,因?yàn)槟憬?jīng)常需要將名字視為信息彪见。例如儡司,你可能希望程序?qū)⒅?My name is python!、my name is python! 和 MY NAME IS PYTHON!視為同一個(gè)名字企巢,并將它們都顯示為My name is python! 枫慷。
還有其他幾個(gè)很有用的大小寫(xiě)處理方法。例如浪规,要將字符串改為全部大寫(xiě)或全部小寫(xiě)或听,可以像下面這樣做:

name='my name is python!'
print(name.upper()) // 全部轉(zhuǎn)成大寫(xiě)
print(name.lower()) //全部轉(zhuǎn)成小寫(xiě)

1.2 合并(拼接)字符串

在很多情況下,都需要合并字符串笋婿。例如誉裆,你可能想將姓和名存儲(chǔ)在不同的變量中,等要顯示姓名時(shí)再將它們合而為一:

first_name='wang'
last_name='xianjin'
full_name=fitst_name=last_name
print(full_name)

Python使用加號(hào)(+ )來(lái)合并字符串缸濒。在這個(gè)示例中足丢,我們使用+ 來(lái)合并first_name 、空格和last_name 庇配,以得到完整的姓名,這種合并字符串的方法稱(chēng)為拼接 斩跌。通過(guò)拼接,可使用存儲(chǔ)在變量中的信息來(lái)創(chuàng)建完整的消息捞慌。下面來(lái)看一個(gè)例子

first_name='wang'
last_name='xianjin'
full_name=fitst_name=last_name
print(Hello,+full_name.title()+"!")

1.3去除空格

    name=' pyhton '
    name=name.rstrip()//去除結(jié)尾處的空格
    name=name.lstrip()  //去除開(kāi)頭處的空格
    name=name.strip()  //去除首尾兩頭的空格

2.數(shù)值類(lèi)型

在編程中耀鸦,經(jīng)常使用數(shù)字來(lái)記錄游戲得分、表示可視化數(shù)據(jù)啸澡、存儲(chǔ)Web應(yīng)用信息等袖订。Python根據(jù)數(shù)字的用法以不同的方式處理它們。鑒于整數(shù)使用起來(lái)最簡(jiǎn)單嗅虏,下面就先來(lái)看看Python是如何管理它們的洛姑。

2.1 整數(shù)(int)

在Python中,可對(duì)整數(shù)執(zhí)行加(+ )減(- )乘( )除(/ )運(yùn)算.

>>> 2 + 3
5
>>> 3 - 2
1
>>> 2 * 3
6
>>> 3 / 2
1.5

在終端會(huì)話(huà)中皮服,Python直接返回運(yùn)算結(jié)果楞艾。Python使用兩個(gè)乘號(hào)表示乘方運(yùn)算:

>>> 3 ** 2
9
>>> 3 ** 3
27
>>> 10 ** 6
1000000

Python還支持運(yùn)算次序参咙,因此你可在同一個(gè)表達(dá)式中使用多種運(yùn)算。你還可以使用括號(hào)來(lái)修改運(yùn)算次序产徊,讓Python按你指定的次序執(zhí)行運(yùn)算昂勒,如下所示:

>>> 2 + 3*4
14
>>> (2 + 3) * 4
20

在這些示例中蜀细,空格不影響Python計(jì)算表達(dá)式的方式舟铜,它們的存在旨在讓你閱讀代碼時(shí),能迅速確定先執(zhí)行哪些運(yùn)算奠衔。

2.2浮點(diǎn)數(shù)(float)

Python將帶小數(shù)點(diǎn)的數(shù)字都稱(chēng)為浮點(diǎn)數(shù) 谆刨。大多數(shù)編程語(yǔ)言都使用了這個(gè)術(shù)語(yǔ),它指出了這樣一個(gè)事實(shí):小數(shù)點(diǎn)可出現(xiàn)在數(shù)字的任何位置归斤。每種編程語(yǔ)言都須細(xì)心設(shè)計(jì)痊夭,以妥善地處理浮點(diǎn)數(shù),確保不管小數(shù)點(diǎn)出現(xiàn)在什么位置脏里,數(shù)字的行為都是正常的她我。從很大程度上說(shuō),使用浮點(diǎn)數(shù)時(shí)都無(wú)需考慮其行為迫横。你只需輸入要使用的數(shù)字番舆,Python通常都會(huì)按你期望的方式處理它們:

>>> 0.1 + 0.1
0.2
>>> 0.2 + 0.2
0.4
>>> 2 * 0.1
0.2
>>> 2 * 0.2
0.4

但需要注意的是,結(jié)果包含的小數(shù)位數(shù)可能是不確定的:

>>> 0.2 + 0.1
0.30000000000000004
>>> 3 * 0.1
0.30000000000000004

所有語(yǔ)言都存在這種問(wèn)題矾踱,沒(méi)有什么可擔(dān)心的恨狈。Python會(huì)盡力找到一種方式,以盡可能精確地表示結(jié)果呛讲,但鑒于計(jì)算機(jī)內(nèi)部表示數(shù)字的方式禾怠,這在有些情況下很難。就現(xiàn)在而言贝搁,暫時(shí)忽略多余的小數(shù)位數(shù)即可吗氏;在第二部分的項(xiàng)目中,你將學(xué)習(xí)在需要時(shí)處理多余小數(shù)位的方式雷逆。

2.3復(fù)數(shù)(complex)

complex (復(fù)數(shù)):+ BJ的形式弦讽,其中a,b是彩車(chē)和J(或J)表示-1的平方根(這是一個(gè)虛數(shù))关面。 a是真正的數(shù)字部分坦袍,b是虛部。復(fù)數(shù)不使用Python編程等太。
定義:復(fù)數(shù)是由一個(gè)實(shí)數(shù)和一個(gè)虛數(shù)組合構(gòu)成
結(jié)構(gòu):a±bj ,(a+bj)
其中a是實(shí)部捂齐,b是虛部,j是虛部的標(biāo)志符號(hào)
示例:

print(type(3 + 3j))  # python 用j代表虛部,j前面必須要有代表虛數(shù)部分的數(shù)
print((3j)**2)

3.列表

列表 由一系列按特定順序排列的元素組成缩抡。你可以創(chuàng)建包含字母表中所有字母奠宜、數(shù)字0~9或所有家庭成員姓名的列表包颁;也可以將任何東西加入列表中,其中的元素之間可以沒(méi)有任何關(guān)系压真。鑒于列表通常包含多個(gè)元素娩嚼,給列表指定一個(gè)表示復(fù)數(shù)的名稱(chēng)(如letters 、digits 或names )是個(gè)不錯(cuò)的主意滴肿。在Python中岳悟,用方括號(hào)([] )來(lái)表示列表,并用逗號(hào)來(lái)分隔其中的元素泼差。下面是一個(gè)簡(jiǎn)單的列表示例贵少,這個(gè)列表包含幾種自行車(chē):

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

如果你讓Python將列表打印出來(lái),Python將打印列表的內(nèi)部表示堆缘,包括方括號(hào)

['trek', 'cannondale', 'redline', 'specialized']

鑒于這不是你要讓用戶(hù)看到的輸出滔灶,下面來(lái)學(xué)習(xí)如何訪(fǎng)問(wèn)列表元素。

3.1訪(fǎng)問(wèn)列表元素

列表是有序集合吼肥,因此要訪(fǎng)問(wèn)列表的任何元素录平,只需將該元素的位置或索引告訴Python即可。要訪(fǎng)問(wèn)列表元素缀皱,可指出列表的名稱(chēng)斗这,再指出元素的索引,并將其放在方括號(hào)內(nèi)唆鸡。例如涝影,下面的代碼從列表bicycles 中提取第一款自行車(chē):

  bicycles = ['trek', 'cannondale
  print(bicycles[0])

上面代碼演示了訪(fǎng)問(wèn)列表元素的語(yǔ)法。當(dāng)你請(qǐng)求獲取列表元素時(shí)争占,Python只返回該元素燃逻,而不包括方括號(hào)和引號(hào):

trek

這正是你要讓用戶(hù)看到的結(jié)果——整潔、干凈的輸出臂痕。
你還可以對(duì)任何列表元素調(diào)用第2章介紹的字符串方法伯襟。例如,可使用方法title() 讓元素'trek' 的格式更整潔

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())

這個(gè)示例的輸出與前一個(gè)示例相同握童,只是首字母T是大寫(xiě)的姆怪。

3.1.1索引從0而不是1開(kāi)始

在Python中,第一個(gè)列表元素的索引為0澡绩,而不是1稽揭。在大多數(shù)編程語(yǔ)言中都是如此,這與列表操作的底層實(shí)現(xiàn)相關(guān)肥卡。如果結(jié)果出乎意料溪掀,請(qǐng)看看你是否犯了簡(jiǎn)單的差一錯(cuò)誤。
第二個(gè)列表元素的索引為1步鉴。根據(jù)這種簡(jiǎn)單的計(jì)數(shù)方式揪胃,要訪(fǎng)問(wèn)列表的任何元素璃哟,都可將其位置減1,并將結(jié)果作為索引喊递。例如随闪,要訪(fǎng)問(wèn)第四個(gè)列表元素,可使用索引3骚勘。下面的代碼訪(fǎng)問(wèn)索引1 和3 處的自行車(chē):

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])

這些代碼返回列表中的第二個(gè)和第四個(gè)元素:

cannondale
specialized

Python為訪(fǎng)問(wèn)最后一個(gè)列表元素提供了一種特殊語(yǔ)法铐伴。通過(guò)將索引指定為-1 ,可讓Python返回最后一個(gè)列表元素:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])

這些代碼返回'specialized' 调鲸。這種語(yǔ)法很有用盛杰,因?yàn)槟憬?jīng)常需要在不知道列表長(zhǎng)度的情況下訪(fǎng)問(wèn)最后的元素。這種約定也適用于其他負(fù)數(shù)索引藐石,例如,索引-2 返回倒數(shù)第二個(gè)列表元素定拟,索引-3 返回倒數(shù)第三個(gè)列表元素于微,以此類(lèi)推。

3.1.2使用列表中的各個(gè)值

可像使用其他變量一樣使用列表中的各個(gè)值青自。例如株依,你可以使用拼接根據(jù)列表中的值來(lái)創(chuàng)建消息。
下面來(lái)嘗試從列表中提取第一款自行車(chē)延窜,并使用這個(gè)值來(lái)創(chuàng)建一條消息:

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = "My first bicycle was a " + bicycles[0].title() + "."
print(message)
結(jié)果:My first bicycle was a Trek.

3.2 修改添加和刪除元素

你創(chuàng)建的大多數(shù)列表都將是動(dòng)態(tài)的恋腕,這意味著列表創(chuàng)建后,將隨著程序的運(yùn)行增刪元素逆瑞。例如荠藤,你創(chuàng)建一個(gè)游戲,要求玩家射殺從天而降的外星人获高;為此哈肖,可在開(kāi)始時(shí)將一些外星人存儲(chǔ)在列表中,然后每當(dāng)有外星人被射殺時(shí)念秧,都將其從列表中刪除淤井,而每次有新的外星人出現(xiàn)在屏幕上時(shí),都將其添加到列表中摊趾。在整個(gè)游戲運(yùn)行期間币狠,外星人列表的長(zhǎng)度將不斷變化。

3.2.1修改列表元素

修改列表元素的語(yǔ)法與訪(fǎng)問(wèn)列表元素的語(yǔ)法類(lèi)似砾层。要修改列表元素漩绵,可指定列表名和要修改的元素的索引,再指定該元素的新值梢为。
例如渐行,假設(shè)有一個(gè)摩托車(chē)列表轰坊,其中的第一個(gè)元素為'honda' ,如何修改它的值呢祟印?

? motorcycles = ['honda', 'yamaha', 'suzuki']
  print(motorcycles)

? motorcycles[0] = 'ducati'
  print(motorcycles)

我們首先定義一個(gè)摩托車(chē)列表肴沫,其中的第一個(gè)元素為'honda' (見(jiàn)?)。接下來(lái)蕴忆,我們將第一個(gè)元素的值改為'ducati' (見(jiàn)?)颤芬。輸出表明,第一個(gè)元素的值確實(shí)變了套鹅,但其他列表元素的值沒(méi)變:

['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

你可以修改任何列表元素的值站蝠,而不僅僅是第一個(gè)元素的值。

3.2.2在列表中添加元素

你可能出于眾多原因要在列表中添加新元素卓鹿,例如菱魔,你可能希望游戲中出現(xiàn)新的外星人、添加可視化數(shù)據(jù)或給網(wǎng)站添加新注冊(cè)的用戶(hù)吟孙。Python提供了多種在既有列表中添加新數(shù)據(jù)的方式澜倦。

  • 在列表末尾添加元素
    在列表中添加新元素時(shí),最簡(jiǎn)單的方式是將元素附加到列表末尾杰妓。給列表附加元素時(shí)藻治,它將添加到列表末尾。繼續(xù)使用前一個(gè)示例中的列表巷挥,在其末尾添加新元素'ducati'
motorcycles = ['honda', 'yamaha', 'suzuki']
  print(motorcycles)

? motorcycles.append('ducati')
  print(motorcycles)

方法append() 將元素'ducati' 添加到了列表末尾(見(jiàn)? )桩卵,而不影響列表中的其他所有元素:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

方法append() 讓動(dòng)態(tài)地創(chuàng)建列表易如反掌,例如倍宾,你可以先創(chuàng)建一個(gè)空列表雏节,再使用一系列的append() 語(yǔ)句添加元素。下面來(lái)創(chuàng)建一個(gè)空列表凿宾,再在其中添加元素'honda' 矾屯、'yamaha' 和'suzuki' :

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)

最終的列表與前述示例中的列表完全相同:

['honda', 'yamaha', 'suzuki']

這種創(chuàng)建列表的方式極其常見(jiàn),因?yàn)榻?jīng)常要等程序運(yùn)行后初厚,你才知道用戶(hù)要在程序中存儲(chǔ)哪些數(shù)據(jù)件蚕。為控制用戶(hù),可首先創(chuàng)建一個(gè)空列表产禾,用于存儲(chǔ)用戶(hù)將要輸入的值排作,然后將
用戶(hù)提供的每個(gè)新值附加到列表中。

  • 在列表中插入元素
    使用方法insert() 可在列表的任何位置添加新元素亚情。為此妄痪,你需要指定新元素的索引和值。
 motorcycles = ['honda', 'yamaha', 'suzuki']

? motorcycles.insert(0, 'ducati')
  print(motorcycles)

在這個(gè)示例中楞件,值'ducati' 被插入到了列表開(kāi)頭(見(jiàn)?)衫生;方法insert() 在索引0 處添加空間裳瘪,并將值'ducati' 存儲(chǔ)到這個(gè)地方。這種操作將列表中既有的每個(gè)元素都右移一個(gè)位置:

['ducati', 'honda', 'yamaha', 'suzuki']

3.2.3 從列表中刪除元素

你經(jīng)常需要從列表中刪除一個(gè)或多個(gè)元素罪针。例如彭羹,玩家將空中的一個(gè)外星人射殺后,你很可能要將其從存活的外星人列表中刪除泪酱;當(dāng)用戶(hù)在你創(chuàng)建的Web應(yīng)用中注銷(xiāo)其賬戶(hù)時(shí)派殷,你需要將該用戶(hù)從活躍用戶(hù)列表中刪除。你可以根據(jù)位置或值來(lái)刪除列表中的元素墓阀。

  • 使用del語(yǔ)句刪除元素
motorcycles = ['honda', 'yamaha', 'suzuki']
  print(motorcycles)

? del motorcycles[0]
  print(motorcycles)

? 處的代碼使用del 刪除了列表motorcycles 中的第一個(gè)元素——'honda' :

['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

使用del 可刪除任何位置處的列表元素毡惜,條件是知道其索引。下例演示了如何刪除前述列表中的第二個(gè)元素——'yamaha' :

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

del motorcycles[1]
print(motorcycles)

下面的輸出表明斯撮,已經(jīng)將第二款摩托車(chē)從列表中刪除了:

['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']

在這兩個(gè)示例中经伙,使用del 語(yǔ)句將值從列表中刪除后,你就無(wú)法再訪(fǎng)問(wèn)它了吮成。

  • 使用方法pop()刪除元素
    有時(shí)候橱乱,你要將元素從列表中刪除,并接著使用它的值粱甫。例如,你可能需要獲取剛被射殺的外星人的 x 和 y 坐標(biāo)作瞄,以便在相應(yīng)的位置顯示爆炸效果茶宵;在Web應(yīng)用程序中,你可能要將用戶(hù)從活躍成員列表中刪除宗挥,并將其加入到非活躍成員列表中乌庶。

方法pop() 可刪除列表末尾的元素,并讓你能夠接著使用它契耿。術(shù)語(yǔ)彈出 (pop)源自這樣的類(lèi)比:列表就 像一個(gè)棧瞒大,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。
下面從列表motorcycles 中彈出一款摩托車(chē):

? motorcycles = ['honda', 'yamaha', 'suzuki']
  print(motorcycles)

? popped_motorcycle = motorcycles.pop()
? print(motorcycles)
? print(popped_motorcycle)

我們首先定義并打印了列表motorcycles (見(jiàn)?)搪桂。接下來(lái)透敌,我們從這個(gè)列表中彈出一個(gè)值,并將其存儲(chǔ)到變量popped_motorcycle 中(見(jiàn)?)踢械。然后我們打印這個(gè)列表酗电,以核實(shí)從其中刪除了一個(gè)值(見(jiàn)?)。最后内列,我們打印彈出的值撵术,以證明我們依然能夠訪(fǎng)問(wèn)被刪除的值(見(jiàn)?)。

輸出表明话瞧,列表末尾的值'suzuki' 已刪除嫩与,它現(xiàn)在存儲(chǔ)在變量popped_motorcycle 中:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

方法pop() 是怎么起作用的呢寝姿?假設(shè)列表中的摩托車(chē)是按購(gòu)買(mǎi)時(shí)間存儲(chǔ)的,就可使用方法pop() 打印一條消息划滋,指出最后購(gòu)買(mǎi)的是哪款摩托車(chē):

motorcycles = ['honda', 'yamaha', 'suzuki']

last_owned = motorcycles.pop()
print("The last motorcycle I owned was a " + last_owned.title() + ".")

輸出是一個(gè)簡(jiǎn)單的句子饵筑,指出了最新購(gòu)買(mǎi)的是哪款摩托車(chē):

The last motorcycle I owned was a Suzuki.
  • 彈出列表中任意位置的元素
motorcycles = ['honda', 'yamaha', 'suzuki']

? first_owned = motorcycles.pop(0)
? print('The first motorcycle I owned was a ' + first_owned.title() + '.')

首先,我們彈出了列表中的第一款摩托車(chē)(見(jiàn)?)古毛,然后打印了一條有關(guān)這輛摩托車(chē)的消息(見(jiàn)?)翻翩。輸出是一個(gè)簡(jiǎn)單的句子,描述了我購(gòu)買(mǎi)的第一輛摩托車(chē):

The first motorcycle I owned was a Honda.

別忘了稻薇,每當(dāng)你使用pop() 時(shí)嫂冻,被彈出的元素就不再在列表中了塞椎。

如果你不確定該使用del 語(yǔ)句還是pop() 方法案狠,下面是一個(gè)簡(jiǎn)單的判斷標(biāo)準(zhǔn):如果你要從列表中刪除一個(gè)元素骂铁,且不再以任何方式使用它吹零,就使用del 語(yǔ)句;如果你要在刪除元素后還能繼續(xù)使用它拉庵,就使用方法pop()灿椅。

  • 根據(jù)值來(lái)刪除元素
    有時(shí)候,你不知道要從列表中刪除的值所處的位置钞支。如果你只知道要?jiǎng)h除的元素的值茫蛹,可使用方法remove() 。
    例如烁挟,假設(shè)我們要從列表motorcycles 中刪除值'ducati' 婴洼。
 motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
  print(motorcycles)

? motorcycles.remove('ducati')
  print(motorcycles)

? 處的代碼讓Python確定'ducati' 出現(xiàn)在列表的什么地方撼嗓,并將該元素刪除:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

使用remove() 從列表中刪除元素時(shí)静稻,也可接著使用它的值警没。下面刪除值'ducati' 振湾,并打印一條消息杀迹,指出要將其從列表中刪除的原因:

? motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
  print(motorcycles)

? too_expensive = 'ducati'
? motorcycles.remove(too_expensive)
  print(motorcycles)
? print("\nA " + too_expensive.title() + " is too expensive for me.")

**在?處定義列表后,我們將值'ducati' 存儲(chǔ)在變量too_expensive 中(見(jiàn)?)。接下來(lái),我們使用這個(gè)變量來(lái)告訴Python將哪個(gè)值從列表中刪除(見(jiàn)?)垂谢。最后,值'ducati' 已經(jīng)從列表中刪除,但它還存儲(chǔ)在變量too_expensive 中(見(jiàn)?),讓我們能夠打印一條消息,指出將'ducati' 從列表motorcycles 中刪除的原因:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

A Ducati is too expensive for me.

注意 : 方法remove() 只刪除第一個(gè)指定的值。如果要?jiǎng)h除的值可能在列表中出現(xiàn)多次,就需要使用循環(huán)來(lái)判斷是否刪除了所有這樣的值付翁。

3.3組織列表

**在你創(chuàng)建的列表中能扒,元素的排列順序常常是無(wú)法預(yù)測(cè)的辛润,因?yàn)槟悴⒎强偰芸刂朴脩?hù)提供數(shù)據(jù)的順序。這雖然在大多數(shù)情況下都是不可避免的见秤,但你經(jīng)常需要以特定的順序呈現(xiàn)信息砂竖。有時(shí)候真椿,你希望保留列表元素最初的排列順序,而有時(shí)候又需要調(diào)整排列順序乎澄。Python提供了很多組織列表的方式突硝,可根據(jù)具體情況選用。

3.3.1 使用方法sort() 對(duì)列表進(jìn)行永久性排序

Python方法sort() 讓你能夠較為輕松地對(duì)列表進(jìn)行排序置济。假設(shè)你有一個(gè)汽車(chē)列表解恰,并要讓其中的汽車(chē)按字母順序排列。為簡(jiǎn)化這項(xiàng)任務(wù)浙于,我們假設(shè)該列表中的所有值都是小寫(xiě)的护盈。**

 cars = ['bmw', 'audi', 'toyota', 'subaru']
? cars.sort()
  print(cars)

方法sort() (見(jiàn)?)永久性地修改了列表元素的排列順序。現(xiàn)在路媚,汽車(chē)是按字母順序排列的黄琼,再也無(wú)法恢復(fù)到原來(lái)的排列順序:

['audi', 'bmw', 'subaru', 'toyota']

你還可以按與字母順序相反的順序排列列表元素,為此整慎,只需向sort() 方法傳遞參數(shù)reverse=True 脏款。下面的示例將汽車(chē)列表按與字母順序相反的順序排列:

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

同樣,對(duì)列表元素排列順序的修改是永久性的:

['toyota', 'subaru', 'bmw', 'audi']

3.3.2  使用函數(shù)sorted() 對(duì)列表進(jìn)行臨時(shí)排序

要保留列表元素原來(lái)的排列順序裤园,同時(shí)以特定的順序呈現(xiàn)它們撤师,可使用函數(shù)sorted() 。函數(shù)sorted() 讓你能夠按特定順序顯示列表元素拧揽,同時(shí)不影響它們?cè)诹斜碇械脑寂帕许樞颉?br> 下面嘗試對(duì)汽車(chē)列表調(diào)用這個(gè)函數(shù)剃盾。

 cars = ['bmw', 'audi', 'toyota', 'subaru']

? print("Here is the original list:")
  print(cars)

? print("\nHere is the sorted list:")
  print(sorted(cars))

? print("\nHere is the original list again:")
  print(cars)

我們首先按原始順序打印列表(見(jiàn)?),再按字母順序顯示該列表(見(jiàn)?)淤袜。以特定順序顯示列表后痒谴,我們進(jìn)行核實(shí),確認(rèn)列表元素的排列順序與以前相同(見(jiàn)?)铡羡。

Here is the original list:
  ['bmw', 'audi', 'toyota', 'subaru']

  Here is the sorted list:
  ['audi', 'bmw', 'subaru', 'toyota']

? Here is the original list again:
  ['bmw', 'audi', 'toyota', 'subaru']

注意积蔚,調(diào)用函數(shù)sorted() 后,列表元素的排列順序并沒(méi)有變(見(jiàn)?)烦周。如果你要按與字母順序相反的順序顯示列表尽爆,也可向函數(shù)sorted() 傳遞參數(shù)reverse=True 。
注意:  在并非所有的值都是小寫(xiě)時(shí)读慎,按字母順序排列列表要復(fù)雜些漱贱。決定排列順序時(shí),有多種解讀大寫(xiě)字母的方式夭委,要指定準(zhǔn)確的排列順序幅狮,可能比我們這里所做的要復(fù)雜。

3.3.3 倒著打印列表

要反轉(zhuǎn)列表元素的排列順序,可使用方法reverse() 彪笼。假設(shè)汽車(chē)列表是按購(gòu)買(mǎi)時(shí)間排列的钻注,可輕松地按相反的順序排列其中的汽車(chē):

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)

cars.reverse()
print(cars)

注意,reverse() 不是指按與字母順序相反的順序排列列表元素配猫,而只是反轉(zhuǎn)列表元素的排列順序:

['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

3.3.1 確定列表的長(zhǎng)度

使用函數(shù)len() 可快速獲悉列表的長(zhǎng)度幅恋。在下面的示例中,列表包含4個(gè)元素泵肄,因此其長(zhǎng)度為4:

>>> cars = ['bmw', 'audi', 'toyota', 'subaru']
>>> len(cars)
4

在你需要完成如下任務(wù)時(shí)捆交,len() 很有用:確定還有多少個(gè)外星人未被射殺,需要管理多少項(xiàng)可視化數(shù)據(jù)腐巢,網(wǎng)站有多少注冊(cè)用戶(hù)等品追。
注意 : Python計(jì)算列表元素?cái)?shù)時(shí)從1開(kāi)始,因此確定列表長(zhǎng)度時(shí)冯丙,你應(yīng)該不會(huì)遇到差一錯(cuò)誤肉瓦。

3.4 使用列表是避免索引錯(cuò)誤

剛開(kāi)始使用列表時(shí),經(jīng)常會(huì)遇到一種錯(cuò)誤胃惜。假設(shè)你有一個(gè)包含三個(gè)元素的列表泞莉,卻要求獲取第四個(gè)元素:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3]

這將導(dǎo)致索引錯(cuò)誤 :

Traceback (most recent call last):
  File "motorcycles.py", line 3, in <module>
    print(motorcycles[3])
IndexError: list index out of range

Python試圖向你提供位于索引3處的元素,但它搜索列表motorcycles 時(shí)船殉,卻發(fā)現(xiàn)索引3處沒(méi)有元素鲫趁。鑒于列表索引差一的特征,這種錯(cuò)誤很常見(jiàn)利虫。有些人從1開(kāi)始數(shù)挨厚,因此以為第三個(gè)元素的索引為3;但在Python中糠惫,第三個(gè)元素的索引為2疫剃,因?yàn)樗饕菑?開(kāi)始的。

索引錯(cuò)誤意味著Python無(wú)法理解你指定的索引硼讽。程序發(fā)生索引錯(cuò)誤時(shí)慌申,請(qǐng)嘗試將你指定的索引減1,然后再次運(yùn)行程序理郑,看看結(jié)果是否正確。

別忘了咨油,每當(dāng)需要訪(fǎng)問(wèn)最后一個(gè)列表元素時(shí)您炉,都可使用索引-1 。這在任何情況下都行之有效役电,即便你最后一次訪(fǎng)問(wèn)列表后赚爵,其長(zhǎng)度發(fā)生了變化:

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[-1])

索引-1 總是返回最后一個(gè)列表元素,這里為值'suzuki' :

'suzuki'

僅當(dāng)列表為空時(shí),這種訪(fǎng)問(wèn)最后一個(gè)元素的方式才會(huì)導(dǎo)致錯(cuò)誤:

motorcycles = []
print(motorcycles[-1])

列表motorcycles 不包含任何元素冀膝,因此Python返回一條索引錯(cuò)誤消息:

Traceback (most recent call last):
  File "motorcyles.py", line 3, in <module>
    print(motorcycles[-1])
IndexError: list index out of range

注意  發(fā)生索引錯(cuò)誤卻找不到解決辦法時(shí)唁奢,請(qǐng)嘗試將列表或其長(zhǎng)度打印出來(lái)。列表可能與你以為的截然不同窝剖,在程序?qū)ζ溥M(jìn)行了動(dòng)態(tài)處理時(shí)尤其如此麻掸。通過(guò)查看列表或其包含的元素?cái)?shù),可幫助你找出這種邏輯錯(cuò)誤赐纱。

<>-------------------------------------------------字典元組啥的的先不寫(xiě)了----------------------------------------->>

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末脊奋,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子疙描,更是在濱河造成了極大的恐慌诚隙,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,036評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件起胰,死亡現(xiàn)場(chǎng)離奇詭異久又,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)效五,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,046評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)地消,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人火俄,你說(shuō)我怎么就攤上這事犯建。” “怎么了瓜客?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,411評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵适瓦,是天一觀(guān)的道長(zhǎng)。 經(jīng)常有香客問(wèn)我谱仪,道長(zhǎng)玻熙,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,622評(píng)論 1 293
  • 正文 為了忘掉前任疯攒,我火速辦了婚禮嗦随,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘敬尺。我一直安慰自己枚尼,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,661評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布砂吞。 她就那樣靜靜地躺著署恍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蜻直。 梳的紋絲不亂的頭發(fā)上盯质,一...
    開(kāi)封第一講書(shū)人閱讀 51,521評(píng)論 1 304
  • 那天袁串,我揣著相機(jī)與錄音,去河邊找鬼呼巷。 笑死囱修,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的王悍。 我是一名探鬼主播破镰,決...
    沈念sama閱讀 40,288評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼配名!你這毒婦竟也來(lái)了啤咽?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,200評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤渠脉,失蹤者是張志新(化名)和其女友劉穎宇整,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體芋膘,經(jīng)...
    沈念sama閱讀 45,644評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鳞青,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,837評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了为朋。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片臂拓。...
    茶點(diǎn)故事閱讀 39,953評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖习寸,靈堂內(nèi)的尸體忽然破棺而出胶惰,到底是詐尸還是另有隱情,我是刑警寧澤霞溪,帶...
    沈念sama閱讀 35,673評(píng)論 5 346
  • 正文 年R本政府宣布孵滞,位于F島的核電站,受9級(jí)特大地震影響鸯匹,放射性物質(zhì)發(fā)生泄漏坊饶。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,281評(píng)論 3 329
  • 文/蒙蒙 一殴蓬、第九天 我趴在偏房一處隱蔽的房頂上張望匿级。 院中可真熱鬧,春花似錦染厅、人聲如沸痘绎。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,889評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)简逮。三九已至,卻和暖如春尿赚,著一層夾襖步出監(jiān)牢的瞬間散庶,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,011評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工凌净, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留悲龟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,119評(píng)論 3 370
  • 正文 我出身青樓冰寻,卻偏偏與公主長(zhǎng)得像须教,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斩芭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,901評(píng)論 2 355