列表是什么
列表是由一系列按特定順序排列的元素組成,在python中使用[]括號(hào)來表示列表,并用逗號(hào)來分隔其中的元素。
例:
heros??=?['an琪拉',"魯班7號(hào)","亞瑟"]
print(heros)
訪問列表元素
列表是有序集合,因此要訪問列表的任何元素,只需要將元素的位置或索引告訴python即可,,要訪問列表元素,可以指定列表名稱,再指出元素的索引,將其放在方括號(hào)內(nèi)。
例:
heros??=?['an琪拉',"魯班7號(hào)","亞瑟"]
print(heros[0])
#訪問列表元素的語法,當(dāng)你請(qǐng)求列表元素時(shí),python返回該元素,但是不包括括號(hào)和引號(hào)。
還可以使用之前學(xué)到的轉(zhuǎn)換字符串大小寫,用來格式化;
例:
heros??=?['an琪拉',"魯班7號(hào)","亞瑟"]
print(heros[0].title())#首字母進(jìn)行了大寫
索引是從0開始而不是1
在python中,第一個(gè)列表元素的索引為0,而不是1。在大多數(shù)編程語言中都是如此,這與列表操作的底層實(shí)現(xiàn)相關(guān)。
第二個(gè)列表元素的索引為1,根據(jù)這種簡(jiǎn)單的計(jì)數(shù)方式,要訪問任何元素,都可以在其位置減1,并將結(jié)果作為索引。例:要訪問第4個(gè)元素,使用的索引為3。
例:
heros??=?['an琪拉',"魯班7號(hào)","亞瑟",'蘭陵王']
print(heros[3])
python為訪問最后一個(gè)元素提供了特殊的語法??梢酝ㄟ^負(fù)索引,來返回列表的最后一個(gè)元素。
例:返回最后一個(gè)元素
heros??=?['an琪拉',"魯班7號(hào)","亞瑟",'蘭陵王']
print(heros[-1])
print(heros[-2])#返回倒數(shù)第二個(gè)元素,以此類推
使用列表中的各個(gè)值
可以像使用其他變量一樣使用列表中的各個(gè)值。例如,你可以使用拼接根據(jù)列表中的值來創(chuàng)建消息。
例:
heros??=?['an琪拉',"魯班7號(hào)","亞瑟",'蘭陵王']
message7?=?'?是新手很喜歡的英雄'
print(heros[-1]?+?message7)
練習(xí):
#練習(xí)20?將一些朋友的姓名存儲(chǔ)在一個(gè)列表中,將其命名為names?依次訪問列表中的每個(gè)元素,
#?從而將每個(gè)朋友姓名依次打印出來
names?=?['jack','luse','li','may']
print(names[0],names[1],name[2],name[3])
#練習(xí)21?問候語,繼續(xù)使用姓名列表,
#?但是不打印每個(gè)人的姓名,而是給每個(gè)人打印一條消息。每條消息都包含相同的問候語
names?=?['jack','luse','li','may']
print(names[0]?+??'?新年快樂')
print(names[1]?+??'?新年快樂')
print(names[2]?+??'?新年快樂')
print(names[3]?+??'?新年快樂')
#練習(xí)22?自己的列表,想想自己喜歡的通勤方式,例如騎摩托車或者開汽車,
#?并創(chuàng)建一個(gè)包含多種通勤方式的列表,根據(jù)該列表打印一個(gè)有關(guān)通勤方式的宣言
commuting_mode?=?['drive?a?car','Cycling'?,'run']
print(commuting_mode[0]?+?'?時(shí)間最短')
print(commuting_mode[1]?+?'?速度第二')
print(commuting_mode[2]?+?'?速度最慢')
修改、添加、刪除元素
修改列表元素
修改列表元素與訪問列表元素語法類似。要修改的列表元素,可以指定列表名和要修改的元素索引,再指定該元素的新值。
例:
heros?=?['安琪拉','亞瑟','李白']
heros[0]?=?'魯班'
print(heros)#此時(shí)輸出結(jié)果,列表的第一個(gè)元素變成了魯班
在列表末尾添加元素
在列表中添加新元素時(shí),最簡(jiǎn)單的方式是將元素附加到列表末尾。給列表附加元素時(shí),默認(rèn)添加到列表末尾。
例:
heros?=?['安琪拉','亞瑟','李白']
heros.append('項(xiàng)羽')
print(heros)#此時(shí)輸出,可以看到項(xiàng)羽被添加到列表的最后
創(chuàng)建一個(gè)空列表, 將元素全部添加到列表中
例:
heros = []
heros.append('鐘馗','虞姬','阿古朵','司空震')
print(heros)#此時(shí)報(bào)錯(cuò)ypeError: list.append() takes exactly one argument (4 given),因?yàn)閍ppend一次只能添加一個(gè)元素
修改后:
heros?=?[]
heros.append('鐘馗')
heros.append('司空震')
heros.append('阿古朵')
heros.append('虞姬')
print(heros)
在列表中插入元素
使用方法insert()可以在任何位置添加新元素。為此,需要指定新元素的索引值。
例:
heros?=?['安琪拉','亞瑟','李白']
heros.insert(1,'孫斌')
print(heros)#此時(shí)輸出,索引1變成了孫斌,其他元素向右移了一位
從列表中刪除元素
●使用del語句刪除元素
知道刪除的元素在列表中的位置,可以使用del語句刪除
例:
heros?=?['安琪拉','亞瑟','李白']
del?heros[0]
print(heros)
注意:使用del刪除元素后,就無法再訪問到元素了
●使用方法pop()彈出元素
如果想把元素從列表中刪除,但是還需要使用它的值,可以使用pop方法進(jìn)行刪除,默認(rèn)刪除列表最后一個(gè)元素。
因?yàn)榱斜砭拖袷且粋€(gè)棧,刪除列表末尾的元素相當(dāng)于彈出棧頂元素。
例:
heros?=?['安琪拉','亞瑟','李白']
heros_pop?=?heros.pop()#刪除的元素可以賦值給新的變量
print(heros_pop)
彈出列表中的任何位置的元素
在pop()方法中指定元素的索引即可彈出任何位置的元素
例:
heros?=?['安琪拉','亞瑟','李白']
heros.pop(1)#彈出列表第2個(gè)元素
print(heros)
通過事例,我們可以根據(jù)使用場(chǎng)景,選擇刪除元素,還是彈出元素。
根據(jù)值刪除元素
有時(shí)候,我們不知道列表中要?jiǎng)h除元素的位置,只知道要?jiǎng)h除的元素??梢允褂?b>remove()方法。
例:
heros?=?['安琪拉','亞瑟','李白']
heros.remove('李白')
print(heros)#可以看到元素值為李白的元素被刪除
注意:
?remove方法也是彈出,彈出后的值可以存儲(chǔ)到變量中。
?remove只能刪除一次,如果列表中出現(xiàn)多次要?jiǎng)h除的值,需要循環(huán)刪除。
練習(xí):
#練習(xí)31??如果你可以邀請(qǐng)任何人一起共進(jìn)晚餐,你邀請(qǐng)那些人?請(qǐng)創(chuàng)建一個(gè)列表,其中包含3個(gè)你要邀請(qǐng)的人,
#?然后使用這個(gè)列表打印消息,邀請(qǐng)這些人來與你共進(jìn)晚餐
names?=?[]
names.append('老王')
names.append('老張')
names.append('老李')
print(names)
print(names[0]?+?'?來吃飯')
print(names[1]?+?'?來吃飯')
print(names[2]?+?'?來吃飯')
print(names[0]?+?'?有事兒,不能來吃飯')
#練習(xí)32?修改要求嘉賓名單,你剛得知有一個(gè)嘉賓無法參加,因此需要邀請(qǐng)另一位。
#?修改邀請(qǐng)名單?將無法參加的嘉賓,更換
#?再打印一次邀請(qǐng)
names[0]?=?'老吳'
print(names[0]?+?'?來吃飯')
print(names[1]?+?'?來吃飯')
print(names[2]?+?'?來吃飯')
print('找到了一個(gè)大的餐桌,所以可以再來三個(gè)人')
#練習(xí)33?得到消息,有了一個(gè)大的包間,還可以再邀請(qǐng)3位
names.insert(0,'老劉')#老劉在第一位
names.insert(0,'老錢')#老錢在最新的人前
names.append('老趙')#老趙最后
print(names[0]?+?'?來吃飯')
print(names[1]?+?'?來吃飯')
print(names[2]?+?'?來吃飯')
print(names[3]?+?'?來吃飯')
print(names[4]?+?'?來吃飯')
print(names[5]?+?'?來吃飯')
print('因?yàn)槭巢牟蛔?,只能邀?qǐng)兩人了')
#練習(xí)34?縮減名單,因?yàn)樾沦徺I的食材不足?
#?在33練習(xí)后,打印一條消息,只能邀請(qǐng)兩人用餐。
#?使用pop不斷的彈出嘉賓,直到剩下兩人,每次彈出消息都要發(fā)送抱歉
a=?names.pop()
print(a?+?'抱歉')
b?=?names.pop()
print(b?+?'抱歉')
c?=?names.pop()
print(c?+?'抱歉')
d?=?names.pop()
print(d?+?'抱歉')
#對(duì)于剩下的兩位,每一位打印一條消息
print(names[0]+?'?來吃飯')
print(names[1]?+?'?來吃飯')
#使用del將最后兩位嘉賓,程序結(jié)束時(shí),名單為空
del?names[0]
del?names[0]
print(names)
組織列表
在創(chuàng)建列表中,元素的順序是無法預(yù)測(cè)的,所以需要對(duì)列表進(jìn)行排序。
使用sort()方法對(duì)列表進(jìn)行永久排序
python中的sort()方法可以對(duì)列表進(jìn)行排序。
例如:
我們有一個(gè)英雄列表,想讓英雄按照字母進(jìn)行排序
heros?=?['ya瑟','an琪拉','zhong馗','lu班']
print(heros)
heros.sort()
print(heros)
print(heros)
注意:sort()方法是永久排序
也可以使用sort()方法進(jìn)行倒敘,sort()方法提供了reverse=True。
heros?=?['ya瑟','an琪拉','zhong馗','lu班']
print(heros)
heros.sort(reverse=True)
print(heros)
print(heros)
使用函數(shù)sorted()對(duì)列表進(jìn)行臨時(shí)排序
要保留列表元素原來的排列順序,可以使用函數(shù)sorted()。
例:
heros?=?['ya瑟','an琪拉','zhong馗','lu班']
print(sorted(heros))
print(heros)#原始列表順序未更改
sorted()方法也支持倒敘,可以傳入reverse=True
倒著打印列表
想要反轉(zhuǎn)列表元素的排列順序,可以使用reverse()
例:
heros?=?['ya瑟','an琪拉','zhong馗','lu班']
print('原始數(shù)據(jù)',heros)
heros.reverse()
print(heros)
注意:reverse()方法不是按照字母進(jìn)行排序,而是直接將列表倒過來
確定列表的長度
使用函數(shù)len()方法,可以快速獲取列表的長度。
heros?=?['ya瑟','an琪拉','zhong馗','lu班']
print(len(heros))#可以看到輸出元素長度為4
注意:len()方法的計(jì)算是從1開始,所以不需要 +1?
練習(xí):
#放眼世界,想出5個(gè)想要去的國家
#將這些國家放在一個(gè)列表中,并確保國家不是按照字母順序排列的
countrys?=?['U.S.A',?'Germany','U.S','Japan','India']
#按原始排序打印該列表,不要考慮輸出是否整潔
print(countrys)
#使用sorted()安字母順序打印這個(gè)列表,同時(shí)不要修改它
print(sorted(countrys))
#再次打印該列表,核實(shí)排列順序未變
print(countrys)
#使用sorted()按照字母順序相反的順序打印這個(gè)列表,同時(shí)不要修改它
print(sorted(countrys,reverse=True))
#再次打印該列表,核實(shí)排列順序未改變
print(countrys)
#使用reverse()方法修改列表元素排列順序,打印該列表,核實(shí)排列順序改變
countrys.reverse()
print(countrys)
#再使用reverse()方法修改元素排列順序,打印該列表,核實(shí)已經(jīng)恢復(fù)到原來的排列順序
countrys.reverse()
print(countrys)
#使用sort()修改該列表,使其元素按照字母順序排列,打印該列表,核實(shí)排列順序確實(shí)變了
countrys.sort()
print(countrys)
#使用sort()修改該列表,使其元素按照與字母順序相反的順序排列,打印該列表,核實(shí)排列順序確實(shí)變了
countrys.sort(reverse=True)
print(countrys)
擴(kuò)展:
嘗試用各個(gè)函數(shù),儲(chǔ)存到列表,如:山丘,河流,城市,美食,或是你喜歡的任何東西,要求使用所有學(xué)到的函數(shù)來處理這個(gè)列表。
操作列表
你已經(jīng)學(xué)習(xí)了操作列表中的元素,現(xiàn)在你可以學(xué)習(xí)如何遍歷整個(gè)列表,這樣只需要幾行代碼,無論多長的列表,都能高效的處理。
遍歷整個(gè)列表
現(xiàn)在我們使用for循環(huán)進(jìn)行遍歷列表。
例:
countrys?=?['U.S.A',?'Germany','U.S','Japan','India']
for?country?in?countrys:
????print(country)
深入研究循環(huán)
理解循環(huán)的概念很重要,因?yàn)樗怯?jì)算機(jī)自動(dòng)完成重復(fù)工作的常見方式之一。
countrys?=?['U.S.A',?'Germany','U.S','Japan','India']
for?country?in?countrys:#這行代碼讓python獲取列表countrys中的第一個(gè)值,并把值存儲(chǔ)到變量country中,
????print(country)#然后python讀取代碼,后續(xù)依次執(zhí)行
在for循環(huán)中執(zhí)行更多的操作
在for循環(huán)中,可以對(duì)每個(gè)元素執(zhí)行任何操作??梢园嗌傩写a都可以,for循環(huán)對(duì)于執(zhí)行多個(gè)元素的列表很好用。
例:
countrys?=?['U.S.A',?'Germany','U.S','Japan','India']
for?country?in?countrys:
????print(country.lower()?+?'是美麗的國家')
在for 循環(huán)之后要做的操作
for循環(huán)之后怎么做什么?通常我們進(jìn)行總結(jié)性的輸出或者接著執(zhí)行程序晚期必須完成的任務(wù)。
for 循環(huán)后面,沒有縮進(jìn)的代碼,只執(zhí)行一遍,不會(huì)進(jìn)行重復(fù)執(zhí)行。
例:
heros = ["李白","安琪拉","鐘馗",'亞瑟']
for i in heros:
print(i)
print('爭(zhēng)取早日上王者吧')#可以看到,放在for循環(huán)之外的代碼,執(zhí)行了一遍
避免縮進(jìn)錯(cuò)誤
●對(duì)于for循環(huán)之后的語句屬于for循環(huán)的部分代碼,一定要縮進(jìn),如果你忘記了縮進(jìn)會(huì)報(bào)錯(cuò):
IndentationError: expected an indented block
●但是,也會(huì)出現(xiàn)沒有縮進(jìn),但是程序沒有報(bào)錯(cuò)的情況,但是這時(shí)的輸出,可能不是你想要的結(jié)果。出現(xiàn)了邏輯錯(cuò)誤。
●如果你把不必要縮進(jìn)的代碼,放在了for循環(huán)內(nèi),也會(huì)導(dǎo)致邏輯錯(cuò)誤。
●for循環(huán)后,需要是用:號(hào)結(jié)尾,然后下一行編寫要循環(huán)的代碼。
創(chuàng)建數(shù)值列表
使用函數(shù)range()
python提供了range()函數(shù),可以讓我們輕松生成一系列的數(shù)字。
例:
for i in range(10):
print(i)
使用range()方法生成數(shù)字列表
要?jiǎng)?chuàng)建數(shù)字列表,可以使用list()方法。將range()的結(jié)果轉(zhuǎn)換為列表。將range()作為list()的參數(shù),輸出為一個(gè)數(shù)字列表。
例:
num_list?=?list(range(10))
print(num_list)
使用range()函數(shù)時(shí),可以指定步長。
例:
for?i?in?range(0,10,2):#循環(huán)生成0-10,步長為2的數(shù)值
????print(i)
range()方法幾乎可以實(shí)現(xiàn)所有的數(shù)值列表。
例:創(chuàng)建一個(gè)1-10的平方的數(shù)值,python中**代表乘方運(yùn)算
num_power?=?[]
for?i?in?range(1,11):
????num?=?i**2
????num_power.append(num)
print(num_power)
對(duì)于數(shù)字列表執(zhí)行簡(jiǎn)單的統(tǒng)計(jì)計(jì)算
python提供了內(nèi)置函數(shù),可以輕松的計(jì)算出數(shù)字列表的最大值,最小值,總和。
例:
#求和
nums?=?[100,232,321,11,123]
print(sum(nums))
#求最大
print(max(nums))
#求最小
print(min(nums))
列表推導(dǎo)式(列表解析)
我們通過前面的例子,已經(jīng)可以使用3、4行代碼去生成我們想要的數(shù)值列表,這里作為提升,我們介紹一下列表推導(dǎo)式,它可以使用一行代碼讓我們完成需要的任務(wù)。
例:我們需要生成1-10的乘方數(shù)字
num_power?=??[i?**?2?for?i?in?range(1,11)?]?
print(num_power)
語法解析:
首先我們需要,使用一個(gè)列表名,然后指定一個(gè)左[,并定義一個(gè)表達(dá)式,用于我們需要存儲(chǔ)到列表中的值,這個(gè)例子中,是i**2 求值得平方。然后編寫一個(gè)for循環(huán)用于給表達(dá)式提供數(shù)值,最后加上右]作為結(jié)尾。
注意:●這里的for循環(huán)沒有:結(jié)尾
●推到是需要多加練習(xí),可以提升你的代碼效率
練習(xí):
#數(shù)到20:使用一個(gè)for?循環(huán)打印數(shù)字1-20(含)
for?i?in?range(1,21):
????print(i)
#創(chuàng)建一個(gè)列表,其中包含數(shù)字1-100000在使用一個(gè)for循環(huán)將這些數(shù)字打印出來
nums?=?list(range(1,100001))
print(nums)
#創(chuàng)建一個(gè)列表,包含數(shù)字1-100000.再用min?max核實(shí)開頭和結(jié)尾是1和100000?sum求出和
nums1?=?list(range(1,100001))
print(min(nums1))
print(max(nums1))
print(sum(nums1))
#通過函數(shù)range()方法,計(jì)算1-20奇數(shù)?再使用for循環(huán)打印
for?a?in?range(1,21,2):
????print(a)
#創(chuàng)建一個(gè)列表,包含3-30內(nèi)能被3整除的數(shù)字,使用for循環(huán)打印
nums_ji?=[]
for?n?in??range(3,31):
????if?n?%?3?==?0:
????????nums_ji.append(n)
print(nums_ji)
#一個(gè)數(shù)字乘3次被稱為立方,Python中使用**3表示,創(chuàng)建一個(gè)列表包含前1-10的立方,使用for循環(huán)打印
for?i?in?range(1,11):
????i??=?i**3
????print(i)
#使用列表解析生成列表,包含1-10的立方
nums1_li?=?[i**3?for?i?in?range(1,11)?]
print(nums1_li)
使用列表的一部分
在工作中,如果我們只需要使用列表的一部分內(nèi)容,我們處理這部分的內(nèi)容被稱為列表的切片
切片
創(chuàng)建要切片的列表,可以使用第一個(gè)元素和最后一個(gè)元素的索引。與range()函數(shù)一樣,例如要輸出0-2的元素,值為0、1、2。
例:
heros = ['李白','孫尚香','后裔','白起']
print(heros[0:2])
●如果沒有指定索引[:],python會(huì)從開頭切到結(jié)尾
●如果想要最后3個(gè)元素,可以使用負(fù)值 [-3:0]
●切片之后的數(shù)據(jù)類型是list
遍歷切片
可以使用for循環(huán)進(jìn)行切片后進(jìn)行元素遍歷
例:
heros = ['李白','孫尚香','后裔','白起']
print(heros[:])
print(type(heros[:]))#可以看到切片后的類型是list
for hero in heros[-3:]:
print(hero)
復(fù)制列表
如果使用列表的過程中,我們需要?jiǎng)?chuàng)建全新的列表,可以使用切片,起第一個(gè)元素始最后一個(gè)元素。
例:
heros = ['李白','孫尚香','后裔','白起']
heros_new = heros[:]
print(heros_new)
heros.append('孫斌')#為了證明我們現(xiàn)在有兩個(gè)列表,向原始列表添加新的元素
print(heros)
print(heros_new)#復(fù)制的列表沒有新元素
頂頂頂