辛苦堆砌,轉載請注明出處,謝謝!
上一篇文章介紹了Python的基本數據類型和控制流,本篇開始,說說Python更復雜的數據類型,不過這里的復雜是指其具有一定的結構,并不是說這些數據類型真的很難,實際上還是很簡單的,主要包括列表,元祖,集合和字典。基于這些數據類型,我們可以有效地組織數據,并進行靈活的處理。
先來看看我們的列表。
什么是列表?
列表是用[]括起來,用,分割的一系列數據,如
[1, True, 'abc', [2, False, 'def']]
可以看到,列表并不要求其內放置相同類型的數據,但是我們在實際使用中,一般都會放置相同類型的數據,以便于我們進行處理。如
[1, 2, 3]或者['abc', 'def']
如何對列表取值或修改?
(1) 獲取列表長度
使用len()全局方法,len()方法還可以用來測量字符串,元祖以及字典的長度
>>> len([1,2,3])3
(2)列表下標操作
我們可以使用下標對列表進行操作,列表第一個元素的下標為0,第二個為1,以此類推,也可以使用負數,-1代表倒數第一個元素,-2代表倒是第二個元素,以此類推。
我們下面的例子假設都使用列表[1,2,3]進行,賦值給變量a,利用下標讀取值:
>>> a[1]2
>>> a[-3]1
修改對應下標處的值(后續修改操作后記得執行a=[1,2,3],將a變量還原)
>>> a[1]=4>>> a[1, 4, 3]
刪除對應下標處的元素,使用del語句
>>> del a[1]>>> a[1, 3]
通過下標截取子列表,使用start_index:end_index作為下標作用于列表即可,注意,取得的子列表不包括end_index對應的元素,也就是子列表區間為[start_index, end_index),另外,我們可以省略start_index,表示從0開始,省略end_index,表示到達列表末尾
>>> a[1:3][2, 3]
>>> a[:2][1, 2]
>>> a[1:][2, 3]
>>> a[:][1, 2, 3]
>>> a[-2:][2, 3]
執行截取子列表操作之后,看看a的值
>>> a[1, 2, 3]
a并沒有被改變,而是生成了新的子列表,千萬注意。
(3)列表的連接
>>> a=[1,2,3]>>> b=[4,5,6]>>> a+b[1, 2, 3, 4, 5, 6]
(4) 列表的復制
>>> a*3[1, 2, 3, 1, 2, 3, 1, 2, 3]
(5)列表的常用方法
看到這里,熟悉面向對象的人應該能夠想到,如果列表有方法,那么列表實際上是一種Python的類,的確如此
>>> a.__class__<class 'list'>
我們先不去關注Python面向對象編程的部分,畢竟不面向對象的Python已經能夠解決我們的很多問題了。我們只是去看看list,也就是列表類,有哪些常用的操作。由于這些list類的方法,會直接改變列表的內容。在IDLE輸入help(list)可以輸出list類的手冊,可以更深入的了解列表的方法。先執行
>>> a=[1,2,3]
(a) 查找對應值的下標值
>>> a.index(2)1
如果值不存在,Python會拋出錯誤ValueError
>>> a.index(4)Traceback (most recent call last): File "<pyshell#35>", line 1, in <module> a.index(4)ValueError: 4 is not in list
(b)列表尾添加值
>>> a.append(4)>>> a[1, 2, 3, 4]
(c)列表插入值
>>> a.insert(1, 4)>>> a[1, 4, 2, 3]
insert方法的第一個參數是要插入的下標位置,第二個參數是要插入的值。
(d)刪除值
>>> a[1, 4, 2, 3]>>> a.remove(4)>>> a[1, 2, 3]
這里注意和前面del區分,del再知道下標時很好用,刪除對應下標的值,remove則處理知道值但不知道下標的情況。
如果刪除不存在的值,會報錯
>>> a.remove(4)Traceback (most recent call last): File "<pyshell#44>", line 1, in <module> a.remove(4)ValueError: list.remove(x): x not in list
如果列表有重復值,刪除會怎樣?
>>> a=[1,2,3,4,3]>>> a.remove(3)>>> a[1, 2, 4, 3]
刪除了第一個匹配的元素
(e)排序
>>> a=[2,3,1,7]>>> a.sort()>>> a[1, 2, 3, 7]
(6)列表的使用
(a) 用于循環,可以使用in遍歷a中的所有元素
>>> a=[1,2,3]
>>> for b in a: PRint(b, end=' ')
輸出1 2 3
(b) 多重賦值
如果我們想把列表中的值分別賦值給多個變量,我們沒必要這樣
>>> a[1, 2, 3]>>> b=a[0]>>> c=a[1]>>> d=a[2]
只需要一條語句即可
>>> b,c,d=a
(c) 判斷某個值是否在列表中,用in和not in進行操作
>>> 1 in aTrue>>> 4 in aFalse>>> 1 not in aFalse>>> 4 not in aTrue
以上就是列表的內容,了解了列表,元祖就相當簡單了,元祖就是只讀的列表,不能對其進行修改,只能獲取值,只要記住這一點就足夠了,元祖用()擴住,逗號分隔,如(1,2,3),但是如果元祖只有一個值,一定寫成(1,),后面加一個逗號,否則,Python會認為1是用括號擴住的常數1。列表和元祖之間可以相互轉換
>>> a[1, 2, 3]
>>> tuple(a)(1, 2, 3)>>> list(a)[1, 2, 3]
最后再來了解一下set,也就是集合,集合和列表類似,可以修改,也可以添加元素,差別在于,列表是一個有序的雙向隊列,集合無序;列表可以保存重復的元素,而集合不行,如果有重復元素,集合只會保留一個。集合是用{}括起來,用逗號分隔的單個值,這里記住是單個值,以方便和后面的字典區分。如{1,2,3}
元祖,列表和集合三者可以相互轉換,因為他們都是一維的數據結構
>>> a[1, 2, 3]>>> tuple(a)(1, 2, 3)>>> set(a){1, 2, 3}>>> list(a)[1, 2, 3]
集合類的可操作方法不多,可以help(set)查看,另外,由于集合無序,所以不能使用下標進行索引,也沒有sort()方法;集合不能有重復元素,所以集合不能進行復制,總之,記住集合無序且不能有重復,所以列表中與順序和重復有關的操作,集合都是不合法的。
新聞熱點
疑難解答