一、列表
列表由一系列按特定順序排列的元素組成。我們可以創(chuàng)建包含字母表中所有字母、數(shù)字0~9,也可以將任何東西加入列表中,其中的元素之間可以沒有任何關(guān)系。鑒于列表通常包含多個(gè)元素,所以給列表指定一個(gè)表示復(fù)數(shù)的名稱(如:names)是一個(gè)不錯(cuò)的主意。
在
python中,用方括號(hào)[]來表示列表,并用逗號(hào)來分隔其中的元素。若是直接打印列表,Python會(huì)打印列表的內(nèi)部表示,包括方括號(hào)。
二、定義列表
我們創(chuàng)建的大多數(shù)列表都將是動(dòng)態(tài)的,這意味著在列表創(chuàng)建之后,將隨著程序的運(yùn)行增刪元素。
例如:你創(chuàng)建一個(gè)游戲,要求玩家射殺小怪獸;為此,可在開始時(shí)將一些小怪獸存儲(chǔ)在列表中,然后每當(dāng)有小怪獸被消滅時(shí),都將其從列表中刪除,而每次有新的小怪獸出現(xiàn)在屏幕上時(shí),都將其添加到列表中。在整個(gè)游戲運(yùn)行期間,小怪獸列表的長(zhǎng)度將不斷變化。
1.[]中括號(hào)
用中括號(hào)括起一堆數(shù)據(jù)即可,數(shù)據(jù)之間用逗號(hào)隔開。
lis = [1,2,3,4,5]
(1)創(chuàng)建空列表
不知道要向列表中添加什么數(shù)據(jù),也可創(chuàng)建一個(gè)空列表。
empty = []
(2)列表中嵌套列表
lis1 = [1,'思齊',155.520,[1,2,2] ]
可以看到上面這個(gè)列表包含有: 整型、字符串、浮點(diǎn)型數(shù)據(jù)、子列表。
2.list()方法
list()方法用于把一個(gè)可迭代對(duì)象轉(zhuǎn)換為列表。
list(iterable)
'''
功能: 把一個(gè)可迭代對(duì)象轉(zhuǎn)換為列表.
參數(shù):
① iterable: 可迭代對(duì)象。
返回值: 列表。
'''
(1)創(chuàng)建空列表
empty = list()
empty
(2)將字符串中的每個(gè)字符迭代存放進(jìn)列表
a = list('Hero')
a
(3)將元組中的每個(gè)元素迭代存放進(jìn)列表
b = list( (1,2,3,4,5) )
b
(4)與range()結(jié)合生成數(shù)字列表
numbers = list(range(1,6))
numbers
三、列表的訪問
可以通過元素的索引值(index)從列表中獲取單個(gè)元素。
1.訪問列表元素
列表是有序集合,因此想要訪問列表的任意元素,只需將該元素的位置或索引告訴
Python即可。要訪問列表元素,可指出列表的名稱,再指出元素的索引,并將其放在方括號(hào)內(nèi)。
(1)示例
① 例1
fruits = ['葡萄','草莓','大鴨梨','菠蘿']
print(fruits[2])
'大鴨梨'
當(dāng)我們請(qǐng)求獲取列表元素時(shí),
Python只返回該元素,而不包括方括號(hào)和引號(hào)。此外,還可以對(duì)任何列表元素調(diào)用一些方法,如
title()、uper()等。
2.索引
列表索引值從 0 開始。
在
Python中,凡是順序索引第一個(gè)列表元素的索引為0,而不是1。在大多數(shù)編程語言中都是如此,這與列表操作的底層實(shí)現(xiàn)相關(guān)。因?yàn)橛?jì)算機(jī)本身是二進(jìn)制的,在二進(jìn)制世界里只有兩個(gè)數(shù):0 、1,0也就是二進(jìn)制中第一個(gè)數(shù),秉承這個(gè)傳統(tǒng),0也就用于表示第一個(gè)數(shù)。如果結(jié)果出乎意料,請(qǐng)看看你是否犯了簡(jiǎn)單的
差一錯(cuò)誤。第二個(gè)列表元素的索引為1。依此類推,要訪問列表的任何元素,都可將其位置減1,并將結(jié)果作為
索引(index)。
(1)索引為負(fù)值
Python為訪問最后一個(gè)列表元素提供了一種特殊語法。通過將索引指定為-1,可讓Python返回最后一個(gè)列表元素。這種語法很有用,因?yàn)?strong>我們經(jīng)常需要在不知道列表長(zhǎng)度的情況訪問最后的元素。
這種約定也適用于其他負(fù)數(shù)索引,例如:索引-2返回倒數(shù)第二個(gè)列表元素,素引-3返回倒數(shù)第三個(gè)列表元素,以此類推。
① 示例
fruits = ['葡萄','草莓','大鴨梨','菠蘿']
fruits[-1]
'菠蘿'
3.使用列表中的各個(gè)值
可像使用其他變量一樣使用列表中的各個(gè)值。例如,你可以使用拼接根據(jù)列表中的值來創(chuàng)建消息。
animals = ["rabbit","dog","panda","cat"]
# 使用animals[2]的值生成一個(gè)句子,并將其存儲(chǔ)在變量message中
message = "My favorite animal is the " + animals[2] + "."
print(message)
My favorite animal is the panda.
四、修改列表元素
1.修改
修改列表元素的語法和訪問列表元素的語法相似。
通過指定列表名和要修改元素的索引值(index)從列表中獲取單個(gè)元素,再映射1個(gè)新值。
fruit = ['葡萄','草莓','大鴨梨','菠蘿']
fruit[2] = '大西瓜'
fruit
# ['葡萄', '草莓', '大西瓜', '菠蘿']
五、添加
1.append(): 末尾單一元素添加
列表名.append( 想要添加的元素 )
'''
功能: 向列表中添加元素,**每次只能加一個(gè)元素,并且是往列表的末尾添加數(shù)據(jù)**
(也可理解為追加、排隊(duì)增加)。
Append object to the end of the list.
參數(shù): 想要添加的元素。
返回值: 添加完成后的列表。
'''
① 追加1個(gè)元素
num = [1,2,3,4,5]
num.append(6)
num
# 會(huì)發(fā)現(xiàn)參數(shù) 6 被添加到列表的末尾。
② 追加多個(gè)元素(可迭代對(duì)象)
若是我們直接添加多個(gè)元素,
Python會(huì)向我們報(bào)錯(cuò)TypeError: append() takes exactly one argument (2 given),也就是說append()方法1次只能添加一個(gè)參數(shù),那么如果我們就想添加多個(gè)元素該如何操作?用可迭代對(duì)象進(jìn)行添加多個(gè)元素。
Ⅰ.元組
nums = [1,2,3,4,5,6]
nums.append( (7,8) )
print(nums)
'''
[1, 2, 3, 4, 5, 6, (7, 8)]
'''
Ⅱ.列表
nums = [1,2,3,4,5]
nums.append(["思齊","永遠(yuǎn)18歲"])
print(nums)
'''
[1, 2, 3, 4, 5, ['思齊', '永遠(yuǎn)18歲']]
'''
Ⅲ.字典
nums = [1,2,3,4,5]
nums.append({"姓名":"思齊","年齡":"永遠(yuǎn)18歲"})
print(nums)
'''
[1, 2, 3, 4, 5, {'姓名': '思齊', '年齡': '永遠(yuǎn)18歲'}]
'''
③ 優(yōu)點(diǎn)
方法
append()讓動(dòng)態(tài)地創(chuàng)建列表易如反掌,例如,你可以先創(chuàng)建一個(gè)空列表,再使用一系列的append()添加元素,因?yàn)槲覀兘?jīng)常要等程序運(yùn)行后,才知道用戶要在程序中存儲(chǔ)哪些數(shù)據(jù)。為控制用戶,可首先創(chuàng)建一個(gè)空列表,用于存儲(chǔ)用戶將要輸入的值,然后將用戶提供的每一個(gè)新值附加到列表中。
2.extend(): 末尾多元素添加
列表名.extend( [元素1,元素2,...] )
'''
功能: 可向列表中添加多個(gè)元素,但是在**列表末尾添加**。
參數(shù):
① 可迭代對(duì)象: 將想要添加的元素以 列表 或 元組 形式傳入。
返回值: 添加完成后的列表。
'''
① 參數(shù)為可迭代對(duì)象
一定要注意,
extend()的參數(shù)是可迭代對(duì)象。和
append()方法一樣,如果我們直接在方法的括號(hào)里添加多個(gè)元素,Python還是會(huì)向我們報(bào)錯(cuò)TypeError: extend() takes exactly one argument (2 given).extend(iterable, /) method of builtins.list instance Extend list by appending elements from the iterable.,不是說append()可以添加多個(gè)元素嗎?這是為什么呢?原因就在于extend() 接收可迭代對(duì)象。
Ⅰ.傳入元組
nums = [1,2,3,4,5]
nums.extend( (9,10) )
print(nums)
'''
[1, 2, 3, 4, 5, 9, 10]
向extend()傳入一個(gè)元組,添加成功。
'''
Ⅱ.傳入列表
nums = [1,2,3,4,5]
nums.extend( [7,8] )
print(nums)
'''
[1, 2, 3, 4, 5, 7, 8]
向extend()傳入一個(gè)列表,添加成功。
'''
Ⅲ.傳入字典(不可?。?/h6>
nums = [1,2,3,4,5]
nums.extend( {"姓名":"思齊","年齡":"永遠(yuǎn)18歲"} )
print(nums)
'''
[1, 2, 3, 4, 5, '姓名', '年齡']
'''
如果用 + 只是臨時(shí)添加。
向列表傳入一個(gè)字典是不可取的,因?yàn)闀?huì)造成數(shù)據(jù)丟失,從上述結(jié)果可看到,只是把鍵名取出,而鍵值被省略。
3.insert():任意位置添加
nums = [1,2,3,4,5]
nums.extend( {"姓名":"思齊","年齡":"永遠(yuǎn)18歲"} )
print(nums)
'''
[1, 2, 3, 4, 5, '姓名', '年齡']
'''
如果用 + 只是臨時(shí)添加。
向列表傳入一個(gè)字典是不可取的,因?yàn)闀?huì)造成數(shù)據(jù)丟失,從上述結(jié)果可看到,只是把鍵名取出,而鍵值被省略。
insert(索引,值)
'''
功能: 可向列表任意位置添加元素。
參數(shù):
① 索引:列表中的位置。
② 值:在這個(gè)位置添加什么元素。
返回值: 添加完成后的列表。
'''
insert(index, object, /) method of builtins.list instance.Insert object before index.
① 向列表任意位置添加單個(gè)元素
num = [1,2,3,4,5]
num.insert(0,0)
num
② 向列表任意位置添加多個(gè)元素
num = [1,2,3,4,5]
num.insert(5,[6,7])
num
# outout: [1, 2, 3, 4, 5, [6, 7]]
num.insert(6,[8,9,10])
num
# outout: [1, 2, 3, 4, 5, [6, 7], [8, 9, 10]]
Ⅰ.多個(gè)元素被看作一個(gè)整體
其實(shí),
insert()方法添加多個(gè)元素,并不是實(shí)際意義上的添加多個(gè)元素,而是添加的多個(gè)元素被看成一個(gè)整體。
六、刪除
我們經(jīng)常需要從列表中刪除一個(gè)或多個(gè)元素。例如:玩家將游戲中的一個(gè)小怪獸消滅后,你很可能要將其從存活的小怪獸列表中刪除;當(dāng)用戶在你創(chuàng)建的web應(yīng)用中注銷其賬戶時(shí),你需要將該用戶從活躍用戶列表中刪除。你可以根據(jù)位置或值來刪除列表中的元素。
1.使用del語句刪除元素
如果知道要?jiǎng)h除的元素在列表中的位置,可使用
del語句。del 是一個(gè)語句,不是一個(gè)列表的方法,所以不需要在 del 后面加上小括號(hào)()。
del 加列表名,可以刪除整個(gè)列表。
del 加位置索引,可以刪除該位置上的元素。
(1)怎么做?
① 刪除整個(gè)列表
del fruits
② 刪除指定位置上的元素
fruits = ['葡萄','草莓','大鴨梨','菠蘿']
del fruits[1] # 刪除草莓
③ 連續(xù)刪除
fruits = ['葡萄','草莓','大鴨梨','菠蘿']
del (fruits[1],fruits[2])
# 刪除了草莓、菠蘿,先刪除的是fruits中索引為1的,接著再刪除新列表中索引為2的。
(2)永久性刪除
使用del語句將值從列表中刪除后,你就無法再訪問它了。
2.pop():先查出來在刪掉,在數(shù)據(jù)庫(kù)有用
有時(shí)候,你要將元素從列表中刪除,并接著使用它的值。
例如:你可能需要獲取剛被消滅的小怪獸的x和y坐標(biāo),以便在相應(yīng)的位置顯示爆炸效果;在Web應(yīng)用程序中,你可能要將用戶從活躍成員列表中刪除,并將其加入到非活躍成員列表中。
方法pop()默認(rèn)刪除列表末尾的元素,并讓你能夠接著使用它。該術(shù)語彈出(pop)就源自這樣的類比:列表就像一個(gè)棧,而刪除列表末尾的元素相當(dāng)于彈出棧頂元素。
列表名.pop() 或 列表名.pop( 索引值 )
'''
功能: 默認(rèn)刪除最后一個(gè)元素,或刪除指定元素。
參數(shù):
① 不寫值,默認(rèn)刪除最后一個(gè)。
② 索引值: 加上一個(gè)索引值作為參數(shù)的時(shí)候,會(huì)彈出這個(gè)索引值對(duì)應(yīng)的元素。
返回值: 刪除完成后的列表。
'''
pop(index=-1, /) method of builtins.list instance
Remove and return item at index (default last).
Raises IndexError if list is empty or index is out of range.
① 默認(rèn)刪除最后一個(gè)
chinas = ['鳳凰','麒麟','玄武','白虎','青龍']
a = china.pop()
print(a)
print(china)
'''
青龍
['鳳凰', '麒麟', '玄武', '白虎']
'''
② 根據(jù)索引值刪除
china.pop(3)
china
# ['鳳凰', '麒麟', '玄武']
3.remove(): 刪除指定元素
使用
remove()刪除元素,并不需要知道這個(gè)元素在列表中的具體位置,只需要知道該元素存在于列表中即可。若要?jiǎng)h除的東西在列表中根本不存在,程序就會(huì)報(bào)錯(cuò)。
remove() 并不能指定刪除某個(gè)位置的元素,這需要用 del 實(shí)現(xiàn)。
列表名.remove( 元素1 )
remove(元素值)
'''
功能: 刪除指定元素。
參數(shù):
① 列表中存在的元素。
返回值: 刪除完成后的列表。
'''
① 只刪除指定的第一個(gè)
只刪除指定的第一個(gè)值,如果要?jiǎng)h除的值在列表中出現(xiàn)多次,就需要使用循環(huán)來判斷是否刪除了所有這樣的值。
fruits = ['葡萄','菠蘿','草莓','大鴨梨','菠蘿']
fruits.remove('菠蘿')
fruits
# output: ['葡萄', '草莓', '大鴨梨','菠蘿']
② 刪除不存在的元素
python
fruits = ['葡萄','菠蘿','草莓','大鴨梨','菠蘿']
fruits.remove('芒果')
fruits
# ValueError: list.remove(x): x not in list
③ 刪除時(shí)也可接著使用該值
在定義列表后,先將值存儲(chǔ)在變量中,接著,用這個(gè)變量來告訴
Python將哪個(gè)值從列表中刪除,最后,在列表中該值被刪除,但它還存儲(chǔ)在變量中。
python
fruits = ['purple','菠蘿','草莓','大鴨梨','菠蘿']
print(fruits)
fruit = fruits[0]
fruits.remove(fruit)
print(fruits)
print("\nA " + fruit.title() + " is too expensive for me.")
'''
['purple', '菠蘿', '草莓', '大鴨梨', '菠蘿']
['菠蘿', '草莓', '大鴨梨', '菠蘿']
A Purple is too expensive for me.
'''
4.clear():清空列表中所有元素
列表名.clear()
python
'''
功能: 清空列表中所有元素。
參數(shù): 無。
返回值: 空列表。
'''
① 怎么做?
python
fruit = ['葡萄','草莓','大鴨梨','菠蘿']
fruit.clear()
5.方法的選擇
當(dāng)我們不確定該選擇
del語句、pop()、remove()中的哪一個(gè)的時(shí)候,我們可以按照以下一個(gè)簡(jiǎn)單判斷標(biāo)準(zhǔn):若是我們要從列表中刪除一個(gè)元素,且不再以任何方式使用它,就使用del語句;若是我們?cè)趧h除元素之后還想繼續(xù)使用它,就是用pop()或remove()方法。