第四章 列表
4.1 創(chuàng)建一個列表
我們之前學(xué)過c語言的同學(xué)都知道一個數(shù)據(jù)類型叫做數(shù)組,但是數(shù)組有一個硬性的要求幕帆,就是數(shù)組內(nèi)的數(shù)據(jù)類型必須一致,但由于python沒有數(shù)據(jù)類型,所以python便加入了一個強(qiáng)大的列表各薇,并且?guī)缀蹩梢韵蚶镒⑷肴魏晤愋偷脑亍?br> 列表的創(chuàng)建其實(shí)很簡單,只需要定義一個列表變量然后將任何數(shù)據(jù)通過 "[ ] "的形式括起來賦給變量就可以了君躺,像這樣峭判。
# 這個列表內(nèi)只有數(shù)字
list1 = [1, 2, 3, 4, 5]
# 但這個列表內(nèi)有多種類型,有數(shù)字棕叫,字符串林螃,甚至還可以是一個列表
list2 = [1, 2, 3, "Hopes", [1, 2, 3]]
# 當(dāng)然,也可以先建一個空列表俺泣,以便以后對它進(jìn)行操作
empty = []
將這段代碼錄入到pycharm疗认,然后運(yùn)行一下試試完残。
4.2 列表中添加元素
列表是可操作的,并且操作起來十分靈活横漏,并且在以后的學(xué)習(xí)中列表也是不可或缺的部分谨设,列表常用的操作包括:元素的添加,刪除绊茧,獲取铝宵,修改,查詢华畏。鹏秋。。并且列表還有很多的BIF也就是方法亡笑,下面我們一一介紹.
如果我們想要向列表中添加一個元素侣夷,我們就會用到一個BIF----append()方法
# 首先定義一個列表,并賦初始元素值
number = [1, 2, 3, 4]
# 用append方法向其添加元素
number.append(5)
# 打印輸出
print(number)
結(jié)果:
[1, 2, 3, 4, 5]
我們之前講到過一個叫做BIF的東西仑乌,我們說過它是python的內(nèi)置方法百拓,可以直接調(diào)用,在這里我們可以看出晰甚,方法可以直接通過 " .BIF() "的方式調(diào)用衙传。但是我們會發(fā)現(xiàn),并不能通過append方法同時添加多個元素厕九,不妨試一下如果加入多個元素會不會出錯:
number = [1, 2, 3, 4]
number.append(5, 6)
試過了沒有蓖捶?是不是報錯了這樣的內(nèi)容:
TypeError: appen() takes exactly one argument( 2 given)
意思是append方法只能傳入一個值,而這里傳入了兩個扁远,所以肯定會報錯俊鱼。
那我們?nèi)绻胍淮涡约尤攵鄠€元素呢?當(dāng)然是有辦法的畅买,這里我們就用到了一個extend方法并闲,extend即為拓展的意思,不同于append添加谷羞,它可以將一個列表拓展進(jìn)另一個列表帝火,什么意思呢?看下面的代碼:
number = [1, 2, 3, 4]
number.extend([5, 6, 7])
print(number)
運(yùn)行一下湃缎,結(jié)果:
[1 ,2 , 3, 4, 5, 6, 7]
是不是將列表[5, 6, 7]拓展進(jìn)了列表[1, 2, 3, 4]中购公,但是一定要記住,extend內(nèi)只能是一個列表雁歌,而不能是單獨(dú)的元素,否則也會報錯知残。
number.extend(5, 6, 7) # 錯誤
number.extend([5, 6, 7]) # 正確
但是這兩個添加都存在一個問題:我們只能向整個列表的后面添加靠瞎,但是如果我想向某個位置插入一個元素該怎么辦比庄?這里我們再介紹一個向列表中插入元素的方法:insert方法。
number = [0, 1, 3, 4, 5, 6]
number.insert(3, 2)
print(number)
結(jié)果:
[0, 1, 2, 3, 4, 5, 6]
是不是將3插入到第2個元素的位置了呢乏盐?你如果問:第二個佳窑?我數(shù)著是第三個啊父能?神凑。。何吝。那你可就要注意了溉委,所以有的機(jī)器語言中,都是從0開始數(shù)的爱榕,再數(shù)一遍瓣喊,是不是第二個了?所以黔酥,insert()中可傳入兩個參數(shù)藻三,insert(3, 2) .3代表要插入的元素,2代表要插入的位置跪者,是不是很簡單棵帽,還是錄入代碼嘗試一下吧。
4.3 元素的獲取
在python列表中的每個元素渣玲,都有著屬于自己的索引值逗概,這個索引值就相當(dāng)于每個班級學(xué)生的序號,相互之間一一對應(yīng)柜蜈,那么所以說仗谆,我們就可以通過索引的方式來獲取我們需要的某個位置上的元素,如下:
# 定義一個列表淑履,里面放著四個同學(xué)的名字
name = ["Hopes", "Alex", "Demo", "Harry"]
# 我們想要序號為1的同學(xué)的名字
stu1 = name[1]
print(stu1)
# 接著是序號為3的同學(xué)的名字
stu3 = name[3]
print(stu3)
結(jié)果:
Alex
Harry
是不是很easy隶垮,只需要在列表變量名后的" [ ] "內(nèi)輸入你想提取出來的元素的序號,就可以獲取相應(yīng)的元素秘噪。
但是有同學(xué)會問狸吞,如果我知道序號想提取序號對應(yīng)的元素可以用這種方式,那么如果我知道某個元素的內(nèi)容指煎,是不是也可以得到它的位置呢蹋偏?答案是肯定的,python是不會放過任何的細(xì)節(jié)的至壤,接下來我們了解一下是怎樣獲取索引值的威始。
4.5 元素的索引值
如果我們想要得到某個元素的索引值,或者說是它的位置像街,我們就需要用到另一個BIF黎棠,即index方法晋渺,index本身就就是索引的意思,所以這里理所當(dāng)然的也由它承擔(dān)這份責(zé)任脓斩,我們來看一下是怎樣使用的吧木西。
# 同樣定義一個包含四個名字的列表
name = ["Hopes", "Alex", "Demo", "Harry"]
# 獲取"Hopes"同學(xué)的位置
loc1 = name.index("Hopes")
print(loc1)
# 獲取"Demo"同學(xué)的位置
loc2 = name.index("Demo")
print(loc2)
結(jié)果:
0
2
怎么樣,很簡單吧随静,錄入一下代碼試試吧八千。
4.4 元素的替換
既然我們已經(jīng)學(xué)會了元素的獲取,那么理解元素的替換并不難燎猛,因?yàn)槿绻覀円鎿Q某個元素恋捆,就必須先獲取到它,所以元素的替換其實(shí)也相當(dāng)于一個元素的重新“賦值”扛门,看看下面的例子吧鸠信。
name = ["Hopes", "Alex", "Demo", "Harry"]
# 我們將Alex同學(xué)替換成Faker同學(xué)
name[1] = "Faker"
# 然后將Harry同學(xué)替換成Uzi同學(xué)
name[3] = Uzi
# 打印輸出
print(name)
結(jié)果:
["Hopes", "Faker", "Demo", "Uzi"]
同樣錄入試一下,學(xué)習(xí)任何一門編程語言都需要不斷地去嘗試去修改论寨,只要堅(jiān)持不懈星立,終有一天可以成為python編程的大牛。
4.6 元素的刪除
我們已經(jīng)學(xué)習(xí)了元素的添加葬凳,獲取绰垂,修改,最后我們學(xué)習(xí)一下關(guān)于元素的刪除火焰,同樣我們介紹常見的刪除元素的三種方法----remove()劲装,del和pop()。
比如我們先學(xué)習(xí)使用remove方式刪除元素:
# 創(chuàng)建一個動物列表
animal = ["mokey", "elephent", "tiger", "snake"]
# 刪除列表中的tiger
animal.remove("tiger")
print(animal)
結(jié)果:
["mokey", "elepent", "snake"]
可以看到昌简,tiger確實(shí)是被刪除了占业,利用remove方式并不需要知道某個元素的具體位置,只要知道元素的內(nèi)容就可以了纯赎,如果刪除一個不存在的元素呢谦疾?你可以試試,它肯定會報錯的犬金,像這樣:
ValueError: list.(x): x not in list
另外如果我只知道某個元素的位置呢念恍?怎么刪除?首先你可以這樣晚顷。
animal = ["mokey", "elephent", "tiger", "snake"]
# 刪除位置為1的元素
animal.remove(animal[1])
print(animal)
很顯然峰伙,這樣是肯定可行的,因?yàn)閍nimal[1]就是位置為1的元素的內(nèi)容该默,但是這樣確實(shí)有點(diǎn)麻煩啊瞳氓,python不是以簡單明了而著稱的嗎?沒錯栓袖,python是絕對不會忘記這點(diǎn)的顿膨,所以下面我們嘗試使用del來刪除某個特定位置的元素锅锨。
animal = ["mokey", "elephent", "tiger", "snake"]
# 刪除第0個元素
del animal[0]
print(animal)
結(jié)果:
["elephent", "tiger", "snake"]
是不是成功的刪除了?但是你會發(fā)現(xiàn)為什么之前用的.remove()方法是放在animal后面且可以傳入一個參數(shù)恋沃,兒del直接放在animal之前了呢?因?yàn)閐el并不是一個list的方法必指,而是一個語句囊咏,如果你想要刪除整個列表,可以通過del加列表名來實(shí)現(xiàn)
animal = ["mokey", "elephent", "tiger", "snake"]
# 刪除animal列表
del animal
print(animal)
結(jié)果:
NameError: name 'animal' is not defined
是不是報錯了塔橡,這也就意味著我們已經(jīng)刪除了animal這個列表梅割。
然后,我們再來介紹一下pop()的刪除方式葛家,這個其實(shí)挺有意思的户辞,因?yàn)樗恰皬棾觥笔降膭h除,并且癞谒,如果pop()不指定參數(shù)底燎,它會默認(rèn)刪除最后位置的元素,還可以制定某個位置來彈出弹砚,先看一下例子双仍。
animal = ["mokey", "elephent", "tiger", "snake"]
# 彈出默認(rèn)位置
animal.pop()
print(animal)
# 彈出第1個元素
animal.pop(1)
print(animal)
結(jié)果:
["mokey", "elephent", "tiger"]
["mokey", "tiger"]
但為什么說它是“彈出”呢?再看下面的代碼桌吃。
animal = ["mokey", "elephent", "tiger", "snake"]
# 彈出默認(rèn)位置
print(animal.pop())
print(animal)
# 彈出第1個元素
print(animal.pop(1))
print(animal)
結(jié)果:
snake
["mokey", "elephent", "tiger"]
elephent
["mokey", "tiger"]
所以看到?jīng)]有朱沃,為什么叫“彈出”?因?yàn)樗趧h除的過程中會給你返回一個要“彈出”的元素茅诱,這樣我們就可以知道我們具體刪除的是哪個元素了逗物,很方便有沒有,錄入代碼自己嘗試一下吧瑟俭。
4.6 列表的切片
我們想到利用索引值可以取出我們需要的元素翎卓,但是我們?nèi)绻淮涡垣@取多個元素呢?這又是一個問題尔当,但是這難不倒我們莲祸,道高一尺魔高一丈,python可以滿足你的任何需求椭迎。這里我們用列表的切片來演示一下一次性多個元素的獲取锐帜。
animal = ["mokey", "elephent", "tiger", "snake"]
# 獲取第0個到第2個元素
print(animal[0: 3]) # 為啥是3呢,因?yàn)榍衅^不包括尾畜号,記住就好
# 當(dāng)然它也可以簡寫成這樣
print(animal[:3]) # 結(jié)果是一樣的
# 而且還可以獲取某個元素之后的所有元素
print(animal[1:])
# 獲取所有的元素
print(animal[:])
結(jié)果:
["mokey", "elephent", "tiger"]
["mokey", "elephent", "tiger"]
["elephent", "tiger", "snake"]
怎么樣缴阎?我們是不是可以以任何方式來獲取元素,下面我們來看一下更高級的切片
# 定義一個包含數(shù)字的列表
num = [1, 2, 3, 4, 5, 6, 7, 8, 9]
# 進(jìn)行步長為2的切片
print(num[0: 9: 2])
# 反轉(zhuǎn)整個列表
print(num[::-1])
結(jié)果:
[1, 3, 5, 7, 9]
[9, 8, 7, 6, 5, 4, 3, 2, 1]
怎么樣是不是很有意思简软,多了解一下列表的切片用法蛮拔,以后會經(jīng)常用的到述暂。
4.7 列表的Partners
我們已經(jīng)學(xué)習(xí)了列表的很多操作方法,比如append建炫,extend畦韭,index,remove肛跌,pop等等艺配,但我們沒有學(xué)到的還有很多,有多少呢衍慎,我們用dir方法來看一下list擁有多少種方法转唉。
dir(list)
結(jié)果:
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__',
'__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__',
'__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__',
'__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append',
'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
是不是很多,是不是感覺我們學(xué)到的東西才冰山一角稳捆,我們先介紹幾種比較常用的方法赠法,其他的我們以后會接觸到。
num = [1, 3, 5, 2, 7, 6, 8, 1, 1]
# count()方法用來獲取某個元素在列表中的出現(xiàn)次數(shù)
print(num.count(1))
# reverse()方法用來反轉(zhuǎn)整個列表
num.reverse()
print(num)
# sort()方法用來排序整個列表
num.sort()
print(num)
結(jié)果:
3
[1, 1, 8, 6, 7, 2, 5, 3, 1]
[1, 1, 1, 2, 3, 5, 6, 7, 8]
這次的內(nèi)容以經(jīng)很多了乔夯,所以大家理解了這些方法之后砖织,不妨再去回頭看看這次的內(nèi)容,溫故而知新可以為師矣嘛驯嘱,所以一定要清楚復(fù)習(xí)的重要性镶苞。