列表
1.1. 列表是什么?
列表是由一系列按特定順序排列的元素組成,所以是有序的集合。列表中的元素可以是不同類型的,列表中也可以嵌套列表。在Python中,用方括號(hào)[]來表示列表,并用逗號(hào)來分隔其中的元素。如下所示:
digits?=?[1,2,3,4,5]
names?=?["Dawn","Jack"]
alls?=?[1,2,3,"Dawn","Jack"]#?列表中的元素可以是不用類型的????
listIn?=?[[1,2,3],?[4,5]]#?列表嵌套
tupleIn?=?[(1,2),?(3,4)]#?元素為元組
1.2. 列表的相關(guān)操作
1.2.1. 索引訪問列表元素
Python列表也支持索引訪問元素,并且與C語言一樣索引訪問也是從0開始的,但是Python支持負(fù)數(shù)索引方式訪問,如-1表示訪問倒數(shù)第一個(gè)元素,-2表示訪問倒數(shù)倒數(shù)第二個(gè)元素。
>>>?digits?=?[1,2,3,4,5]
>>>?digits[0]
1
>>>?digits[-1]
5
>>>?digits[-2]
4
個(gè)人感覺,Python的負(fù)數(shù)索引挺nice的,在訪問最后一個(gè)元素的時(shí)候超級(jí)方便。
下面再說一下多維列表的訪問,跟C語言多維數(shù)組訪問一樣,第一個(gè)[]訪問第一維的,第二個(gè)[]訪問第二維的。
>>>?digits??=?[[1,2,3],?[4,5,6]]
>>>?digits[0][1]
2
1.2.2. 切片操作
Python還有一個(gè)比較騷氣的操作就是支持切片,什么是切片呢?通過[num1:num2:num3]的形式來取列表中指定的某一區(qū)域的元素。其中num1表示切片的起始位置(取得到),num2表示切片結(jié)束的位置(取不到),num3表示步長。如下所示:
>>>?digits?=?[13,2,31,24,45]
>>>?digits[0:-1:2]
[13,31]
0表示從索引為0的位置開始,-1表示到最后的一個(gè)元素(但是這個(gè)元素是取不到的),2表示所取的步長為2,所以依次取13,31,但是45這個(gè)元素因?yàn)槭撬饕秊?1的元素,取不到。當(dāng)然上述的這種方式是最全的使用方式,我們可以省略其中一些,比如省略num1,那么默認(rèn)是從0開始:
>>>?digits?=?[13,2,31,24,45]
>>>?digits[:3:2]
[13,31]
比如省略num2,那么默認(rèn)到最后一個(gè)元素但是最后一個(gè)元素取得到:
>>>?digits[0::2]
[13,31,45]
比如省略num3,那么默認(rèn)步長為1,當(dāng)省略掉num3之后,那么最后一個(gè):也可以省略了,如下
>>>?digits[0:-1:]
[13,2,31,24]
>>>?digits[0:-1]
[13,2,31,24]
當(dāng)然切片還有以下這些省略的操作,我簡單列舉一下,自己多多嘗試一下是最nice的:
>>>?digits?=?[13,2,31,24,45]
>>>?digits[:]
[13,2,31,24,45]
>>>?digits[:2]
[13,2]
>>>?digits[1:]
[2,31,24,45]
個(gè)人總結(jié):切片操作中,必須要有冒號(hào)在才算是切片操作,當(dāng)有了冒號(hào)之后,那么接下去就是根據(jù)冒號(hào)的位置來進(jìn)行判斷,第一個(gè)冒號(hào)左右指定的就是起始位置和結(jié)束位置。當(dāng)省略了結(jié)束的位置,那么默認(rèn)是到最后一個(gè)元素,但是此時(shí)最后一個(gè)元素也是取得到的。
1.2.3. 修改列表元素
通過索引來確定要修改的是哪個(gè)元素,然后再進(jìn)行修改。
>>>?digits?=?[1,2,3,4,5]
>>>?digits[0]?=8
>>>?digits
[8,2,3,4,5]
1.2.4. 增加列表元素
list.append()
該方式是在列表最后添加元素。
>>>?digits?=?[1,2,3,4,5]
>>>?digits.append(6)
>>>?digits
[1,2,3,4,5,6]
list.extend()
該方式可以將參數(shù)中指定的集合中的元素逐一添加到列表中。
>>>?digits?=?[1,2,3,4,5]
>>>?digits.extend([1,2])
>>>?digits
[1,2,3,4,5,1,2]
>>>?digits?=?[1,2,3,4,5]
>>>?digits.extend((1,2))
>>>?digits
[1,2,3,4,5,1,2]
>>>?digits?=?[1,2,3,4,5]
>>>?digits.extend(range(2))
>>>?digits
[1,2,3,4,5,0,1]
list.insert(index, object)
在指定index前插入元素object
>>>?digits?=?[1,2,3,4,5]
>>>?digits.insert(0,0)
>>>?digits
[0,1,2,3,4,5]
1.2.5. 刪除列表元素
del語句
使用del語句刪除指定位置的列表元素。
>>>?digits?=?[1,2,3,4,5]
>>>deldigits[2]
>>>?digits
[1,2,4,5]
list.pop()
將值從列表中刪去,并將值返回。方法pop()可刪除列表末尾的元素,并返回末尾的元素值,此操作中的列表相當(dāng)于一個(gè)棧,刪除末尾的元素相當(dāng)于彈出棧頂元素。當(dāng)然pop()函數(shù)還支持刪除列表中任何位置的元素,只需要在括號(hào)中指定要?jiǎng)h除的元素的索引即可。如下所示:
>>>?digits?=?[1,2,3,4,5]
>>>?digits.pop()
5
>>>?digits
[1,2,3,4]
>>>?digits.pop(1)
2
>>>?digits
[1,3,4]
list.remove()
假如只知道要?jiǎng)h除的元素的值,而不知道某個(gè)值所在的位置,那么就可以用這種方法。
>>>?digits?=?[1,2,3,4,5]
>>>?digits.remove(2)
>>>?digits
[1,3,4,5]
該方法只刪除第一個(gè)指定的值。如果要?jiǎng)h除的值可能在列表中出現(xiàn)多次,就需要使用循環(huán)來判斷是否刪除了所有這樣的值。
list.clear()
該方法是清空列表中所有的元素。
>>>?digits?=?[1,2,3,4,5]
>>>?digits.clear()
>>>?digits
[]
1.2.6. in操作
Python的in關(guān)鍵字表示存在的意思,假如要判斷一個(gè)元素是否存在于一個(gè)列表中,那么直接可以使用in關(guān)鍵字,如果存在則返回True。
>>>?digits?=?[1,2,3,4,5]
>>>1indigits
True
>>>6indigits
False
1.2.7. list.index()方法
index()方法是返回元素在列表中的位置,當(dāng)元素不在列表中會(huì)報(bào)錯(cuò),所以最好加一個(gè)異常處理操作,當(dāng)列表中存在多個(gè)一樣的值,返回的是第一個(gè)。
>>>?digits?=?[1,2,1,4,5]
>>>?digits.index(2)
1
>>>?digits.index(1)
0
>>>?digits.index(6)
Traceback?(most?recent?call?last):
File"<pyshell#160>",?line1,in
digits.index(6)
ValueError:6isnotinlist
1.2.8. list.count()方法
對元素進(jìn)行計(jì)數(shù),不存在的元素計(jì)數(shù)的結(jié)果就是0。
>>>?digits?=?[1,2,1,4,1]
>>>?digits.count(1)
3
>>>?digits.count(5)
0
1.2.9. list.sort()和sorted()方法
list.sort()方法是將list按特定順序重新排列,默認(rèn)為由小到大,參數(shù)reverse=True可改為倒序,由大到小。排序后的結(jié)果直接保存到list中去。
>>>?digits?=?[13,2,31,24,45]
>>>?digits.sort()
>>>?digits
[2,13,24,31,45]
>>>?digits?=?[13,2,31,24,45]
>>>?digits.sort(reverse=True)
>>>?digits
[45,31,24,13,2]
sorted()方法同list.sort()方法類似都是用于排序,只是這種方法不會(huì)改變原列表,而是將排序好的列表返回,同樣可以指定參數(shù)reverse=True將其改為倒序。后面講字典的時(shí)候,還會(huì)講到key這個(gè)參數(shù),可以指定用于排序的值。
>>>?digits?=?[13,2,31,24,45]
>>>?sortedDigits?=?sorted(digits)
>>>?sortedDigits
[2,13,24,31,45]
>>>?digits?=?[13,2,31,24,45]
>>>?sortedDigits?=?sorted(digits,?reverse=True)
>>>?sortedDigits
[45,31,24,13,2]
1.2.10. list.reverse()方法
將list進(jìn)行逆置,并且原list為逆置之后的結(jié)果。
>>>?digits?=?[13,2,31,24,45]
>>>?digits.reverse()
>>>?digits
[45,24,31,2,13]
1.2.11. enumerate()方法
enumerate()方法可以實(shí)現(xiàn)下標(biāo)和值的對應(yīng)。
>>>?digits?=?[13,2,31,24,45]
>>>fori,?valinenumerate(digits):
print(i,?val)
013
12
231
324
445
元組
2.1. 元組是什么?
元組和列表類似,都是有序集合。元組中的元素可以是不同類型的,也可以嵌套元組。Python中使用小括號(hào)()來表示元組,同樣使用逗號(hào)來分割其中的元素。
digits?=?(1,2,3)
names?=?('Dawn','Jack')
alls?=?(1,'Dawn')
tupleIn?=?((1,2),(3,4))
2.2. 元組的操作
元組與列表最大最大最大的不同操作之處在于元組的元素不能修改,只能訪問。假如理解了這點(diǎn),下面的具體操作就可以忽略了。
2.2.1. 索引訪問元組元素
元組也支持索引訪問,跟列表訪問一樣,在訪問多維元組的時(shí)候也是一樣的。
>>>?digits?=?(13,2,31,24,45)
>>>?digits[1]
2
>>>?digits[-1]
45
>>>?digits?=?((32,43)?,(31,24,45))
>>>?digits[0][1]
43
2.2.2. 切片操作
元組跟列表的切片方式一樣,只是返回的是元組的形式,這邊就簡單舉個(gè)例子昂。
>>>?digits?=?(13,2,31,24,45)
>>>?digits[0:-1:2]
(13,31)
2.2.3. 元組元素不能修改
元組元素不能修改也就意味著不能增加、刪除、修改元素等。
>>>?digits?=?(13,2,31,24,45)
>>>?digits[2]?=1
Traceback?(most?recent?call?last):
File"<pyshell#115>",?line1,in
digits[2]?=1
TypeError:'tuple'object?doesnotsupport?item?assignment
2.2.4. in操作
元組的in操作如下所示,同列表。
>>>?digits?=?(13,2,31,24,45)
>>>13indigits
True
>>>12indigits
False
2.2.5. tuple.index()方法
與列表一樣,返回指定元素的索引值,當(dāng)有元組中有同樣的值時(shí),返回的是第一個(gè)。
>>>?digits?=?(13,2,13,24,45)
>>>?digits.index(13)
0
>>>?digits.index(12)
Traceback?(most?recent?call?last):
File"<pyshell#136>",?line1,in
digits.index(12)
ValueError:?tuple.index(x):?xnotintuple
2.2.6. tuple.count()方法
對指定的元素計(jì)算元組中有多少個(gè)一樣的值。
>>>?digits?=?(13,2,13,24,45)
>>>?digits.count(13)
2
>>>?digits.count(2)
1
>>>?digits.count(3)
0
2.2.7. sorted()方法
雖然元組不支持.sort()方法進(jìn)行排序,但是sorted()方法還是可以的,因?yàn)樵摲椒ǚ祷氐氖且粋€(gè)新的。
>>>?digits?=?(13,2,13,24,45)
>>>?sortedDigits?=?sorted(digits)
>>>?sortedDigits
[2,13,13,24,45]
2.2.8. enumerate()方法
>>>?digits?=?(13,2,13,24,45)
>>>fori,valinenumerate(digits):
print(i,?val)
013
12
213
324
445