列表是常用的數據類型,可以對數據進行存儲和修改。
定義列表
1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan']
打印輸出列表
1 >>> print(list_test) 2 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan']
通過下標訪問列表中的元素,列表元素下標從0開始
1 >>> list_test[0] 2 'boduo' 3 >>> list_test[3] 4 'jize' 5 >>> list_test[-1] #還能倒着取 6 'wutenglan' 7 >>> list_test[6] #當輸入下標大於當前列表元素最大下標時,會報錯 8 Traceback (most recent call last): 9 File "<pyshell#16>", line 1, in <module> 10 list_test[6] #當輸入下標大於當前列表元素最大下標時,會報錯 11 IndexError: list index out of range 12 >>>
切片:切取多個元素
剛開始接觸Python列表切片覺得很神奇,也很靈活,下面直接從使用規律總結一些經驗
1 list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan'] 2 3 print (list_test[0:3]) #截取第一位到第三位的字符 4 print (list_test[:]) #截取字符串的全部字符 5 print (list_test[2:]) #截取第二個字符到結尾 6 print (list_test[:3]) #截取從開頭到第三個字符 7 print (list_test[:-3]) #截取從頭開始到倒數第三個字符之前 8 print (list_test[2]) #截取第三個字符 9 print (list_test[-1]) #截取倒數第一個字符 10 print (list_test[::-1]) #創造一個與原字符串順序相反的字符串 11 print (list_test[-3:-1]) #截取倒數第三位與倒數第一位之前的字符 12 print (list_test[-3:]) #截取倒數第三位到結尾 13 print (list_test[:-4:-2]) #逆序截取
1、可見,列表有三個參數的下標有三個參數:beg(起始下標),end(終止下標), step(步長值)
當 step小於0時,beg默認為len(array)-1,end默認為開頭之前。( 補充:此時,beg必須大於end才有結果,否則為空。)
當 step大於0時,beg默認為0,end默認為最末之后。(補充:此時,beg必須小於end才有結果,否則為空。)
2、可見,關於list_test[0:3]切片實際取值列表元素下標范圍為0<=x<3,所以才會有截取第一為到第三位的字符,既列表元素下標為0,1,2的。
3、需要注意的是,列表切片產生的是列表的副本,與原列表不是同一份空間。
1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan'] 2 >>> list_sub = list_test[1,3] #注意這里的切片使用的是(:冒號)而不是(,逗號)自己懵逼了 3 Traceback (most recent call last): 4 File "<pyshell#85>", line 1, in <module> 5 list_sub = list_test[1,3] #注意這里的切片使用的是(:冒號)而不是(,逗號)自己懵逼了 6 TypeError: list indices must be integers or slices, not tuple 7 >>> list_sub = list_test[1:3] 8 >>> list_sub 9 ['xiaoze', 'canglaoshi'] 10 >>>
4、鑽牛角尖問題(個人感覺這個問題可能鑽牛角尖了,過段時間再回看,也請觀看的博友能指導下,不勝感激):
關於下面負索引切片該怎么理解呢
為什么第2行第4行輸出的結果一樣,但是到了第6行第8行就不一樣了呢
1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan'] 2 >>> print (list_test[:]) 3 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan'] 4 >>> print (list_test[-5:]) 5 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan'] 6 >>> print (list_test[::-1]) 7 ['wutenglan', 'jize', 'canglaoshi', 'xiaoze', 'boduo'] 8 >>> print (list_test[-5::-1]) 9 ['boduo'] 10 >>>
答案:關於這個(坑爹的)問題我查找了資料已經解決了,這里主要因為步長值對列表切片默認的開始值結束值造成的影響。
list[beg:end:step]
若 step > 0, 則表示從左向右進行切片。此時,beg必須小於end才有結果,否則為空。
若 step < 0, 則表示從右向左進行切片。 此時,beg必須大於end才有結果,否則為空。
比如上面代碼處第8行,當step(步長值)小 於0,此時列表切片的默認值為beg=-1,end=-5;但是由於我把beg設成-5,導致只能捕獲到一個元素。
所以這就是print(list_test[-5:])與print(list_test[-5::-1])的區別。
追加:
1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan'] 2 >>> list_test.append('woshixinlaide') 3 >>> list_test 4 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan', 'woshixinlaide'] 5 >>> list_test2=['woshixinlaide2','woshixinlaide3'] 6 >>> list_test.append(list_test2) 7 >>> list_test 8 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan', 'woshixinlaide', ['woshixinlaide2', 'woshixinlaide3']] 9 >>>
1、這里面需要注意的是第5行第6行,定義一個列表list_test2使用.append追加到list_test中,list_test2列表在list_test中被視為一個元素。
插入:
1 >>> list_test = ['boduo','xiaoze','canglaoshi','jize','wutenglan'] 2 >>> list_test 3 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan'] 4 >>> list_test.insert(2,'我是新來的') 5 >>> list_test 6 ['boduo', 'xiaoze', '我是新來的', 'canglaoshi', 'jize', 'wutenglan'] 7 >>> list_test2 8 ['woshixinlaide2', 'woshixinlaide3'] 9 >>> list_test.insert(2,list_test2) 10 >>> list_test 11 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我是新來的', 'canglaoshi', 'jize', 'wutenglan'] 12 >>> list_test[2] 13 ['woshixinlaide2', 'woshixinlaide3']
1、觀察第13行,往列表中插入的對象都視為目標列表中的一個元素
修改:
1 >>> list_test 2 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我是新來的', 'canglaoshi', 'jize', 'wutenglan'] 3 >>> list_test[2] 4 ['woshixinlaide2', 'woshixinlaide3'] 5 >>> list_test[3] 6 '我是新來的' 7 >>> list_test[3] = '我已經來了很久了' 8 >>> list_test 9 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我已經來了很久了', 'canglaoshi', 'jize', 'wutenglan'] 10 >>>
刪除:
1 >>> list_test 2 ['boduo', 'xiaoze', ['woshixinlaide2', 'woshixinlaide3'], '我已經來了很久了', 'canglaoshi', 'jize', 'wutenglan'] 3 >>> del list_test[2] #刪除指定下標的元素 4 >>> list_test 5 ['boduo', 'xiaoze', '我已經來了很久了', 'canglaoshi', 'jize', 'wutenglan'] 6 >>> list_test.remove('我已經來了很久了') #刪除指定元素 7 >>> list_test 8 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'wutenglan'] 9 >>> list_test.pop() #刪除列表最后一個元素,並返回該元素 10 'wutenglan' 11 >>> list_test 12 ['boduo', 'xiaoze', 'canglaoshi', 'jize'] 13 >>>
擴展:
1 >>> list_test2 2 ['woshixinlaide2', 'woshixinlaide3'] 3 >>> list_test 4 ['boduo', 'xiaoze', 'canglaoshi', 'jize'] 5 >>> list_test.extend(list_test2) 6 >>> list_test 7 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3'] 8 >>> list_test.extend('xiaoze') #注意這個特例 9 >>> list_test 10 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e'] 11 >>> list_test3 = [['C331',['C332','C333']],['B221','B222'],'A111'] #新建立多級嵌套列表 12 >>> list_test 13 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e'] 14 >>> list_test.extend(list_test3) 15 >>> list_test 16 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e', ['C331', ['C332', 'C333']], ['B221', 'B222'], 'A111'] 17 >>>
1、擴展列表list_test,注意list_test2也是一個列表,但使用extend擴展后,列表list_test2中的元素變成列表list_test中的元素
2、觀察第8行特例,當插入一個字符串時,會拆成單個字母
3、觀察第11行的列表list_test3結構並與第16行擴展到列表list_test的結構
4、可看出,使用列表擴展時會對添擴展內容進行一次細化切片,但只切取一次
拷貝:
查看下列網址:
https://www.cnblogs.com/king-of-purple/p/9420486.html
統計:
1 >>> list_test 2 ['boduo', 'xiaoze', 'canglaoshi', 'jize', 'woshixinlaide2', 'woshixinlaide3', 'x', 'i', 'a', 'o', 'z', 'e', ['C331', ['C332', 'C333']], ['B221', 'B222'], 'A111'] 3 >>> list_test.count('x') 4 1 5 >>>
排序&翻轉:
1 >>> list_test4 = ['xiaoze','canglaoshi',11,22,33] 2 >>> list_test4.sort() #3.0開始Python不支持不用類型數據的排序 3 Traceback (most recent call last): 4 File "<pyshell#162>", line 1, in <module> 5 list_test4.sort() 6 TypeError: unorderable types: int() < str() 7 >>> list_test4[2] = '33' 8 >>> list_test4[3]='11' 9 >>> list_test4[4]='22' 10 >>> list_test4 11 ['xiaoze', 'canglaoshi', '33', '11', '22'] 12 >>> list_test4.sort() 13 >>> list_test4 14 ['11', '22', '33', 'canglaoshi', 'xiaoze'] 15 >>> list_test4.reverse() #翻轉 16 >>> list_test4 17 ['xiaoze', 'canglaoshi', '33', '22', '11'] 18 >>>
獲取下標:
1 >>> list_test4 2 ['xiaoze', 'canglaoshi', '33', '22', '11'] 3 >>> list_test4.index('xiaoze') #獲取指定元素的下標 4 0 5 >>>