Python list列表---學習總結


列表是常用的數據類型,可以對數據進行存儲和修改。

定義列表

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才有結果,否則為空。)

  當 step未給出時: step默認為1。

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 >>> 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM