python 列表 元組

列表

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容