python-數據類型之列表

List是處理一組有序項目的數據結構,是python中使用最頻繁的數據結構實現,能夠完成大多數數據集合類的數據結構實現。支持字符、數字、字符串甚至還能夠嵌套列表、元組、字典等。

(一)列表的建立
(1)List是[]表示,內部元素間用逗號隔開。
(2)List中能夠放元組、字典、列表、字符串、類、內建函數等。
(3)建立一個列表就像給一個變量賦值同樣的簡單.你手工寫一個列表(空的或者有值的都行)而後賦給一個變量,列表是由方括號([])來定義的,固然,你也能夠用工廠方法來建立它.
代碼:python

>>> alist=[123,"abc",4.56,['inner','list'],7-9j]
>>> anotherList=[None,"something to see here"]
>>> print alist
[123, 'abc', 4.56, ['inner', 'list'], (7-9j)]
>>> print anotherList
[None, 'something to see here']
>>> aListThatStartedEmpty=[]
>>> print aListThatStartedEmpty
[]
>>> list("fool")       #工廠方法
['f', 'o', 'o', 'l']

(二)列表的基本操做
列表的基本操做:增刪改查
(1)讀取(訪問列表的值):列表的切片操做就像字符串中同樣;切片操做符([])和索引值或索引值範圍一塊兒使用數據結構

>>> lista=[1,2,3,4]
>>> print lista[0]
>>> print lista[-1]
>>> print lista[1]
>>> print lista[-2]

(2)修改(更新列表):能夠經過在等號的左邊指定一個索引或者索引範圍的方式來更新一個或幾個元素,你也能夠用 append()方法來追加元素到列表中。app

>>> lista[0]+=10
>>> lista[0:3]=[3,4,5,6]
>>> lista
[3, 4, 5, 6, 4]

(3)遍歷:函數

>>> for i in lista:
 ...     print i

(4)刪除:要刪除列表中的元素,若是你確切的知道要刪除元素的素引能夠用 del 語句,不然能夠用remove()方法.經過 pop()方法來刪除並從列表中返回一個特定對象.code

>>> lista=[1,2,3,4]
>>> del lista[-1]
>>> del lista[0]
>>> lista
[2, 3]
>>> print lista
>>> lista.remove(3)
>>> lista
[2]
>>> listb=["a","b","c","d"]
>>> listb.pop()               #pop刪除最後一個
'd'
>>> listb
['a', 'b', 'c']

(5)增長:append、insert、extend對象

>>> lista
>>> lista.append("abc")
>>> lista.append([1,2,3])
>>> lista.extend([4,5,6])
>>> lista.insert(1,1000)
>>> lista

注:extend()方法的參數支持任何可迭代對象以下的文件:排序

>>>motd=[]
>>> motd.append("msg of the day")
>>> f=open(r"C:\Users\AA\Desktop\test1.txt","r")
>>> motd.extend(f)
>>> motd
['msg of the day', 'hello world\n']
>>> f.close()

(6)合併列表:索引

>>> a=[1,2,3]
>>> b=[4,5,6]
>>> a+b

(7)列表的切片操做:rem

print str[0:3]    #截取第一位到第三位的字符 
print str[:]      #截取字符串的所有字符 
print str[6:]     #截取第七個字符到結尾 
print str[:-3]    #截取從頭開始到倒數第三個字符以前
print str[2]     #截取第三個字符
print str[-1]    #截取倒數第一個字符
print str[::-1]   #創造一個與原字符串順序相反的字符串
print str[-3:-1]  #截取倒數第三位與倒數第一位以前的字符 
print str[-3:]    #截取倒數第三位到結尾 
print str[:-5:-3]  #逆序截取

詳解:列表的下標有三個參數:beg(起始下標),end(終止下標),delta(變化量)
當delta小於0時,beg默認爲len(array)-1,end默認爲開頭以前。
當delta大於0時,beg默認爲0,end默認爲最末以後。
當delta未給出時:delta默認爲1字符串

注:列表切片產生的是列表的副本,與原列表不是同一份空間。切片生成的子序列元素是源版的拷貝。所以切片是一種淺拷貝。

>>> x=[1,2,3]
>>> y=x[:]
>>> x[0]=-1
>>> y
[1, 2, 3]

切片的寫操做:

>>> x=[1,2,3,4,5]
>>> x[2:0]=[990]
>>> x
[1, 2, 990, 3, 4, 5]
>>> del x[2:3]
>>> x
[1, 2, 3, 4, 5]
>>> del x[3:2]     #若是from<to del操做無效
>>> x
[1, 2, 3, 4, 5]

(三)列表的運算符:len(list)、+、*、in 、遍歷

>>>a=[1,2,3]
>>>len(a)
3
>>>[1,2,3]+[4,5,6]
[1, 2, 3, 3, 4, 5]
>>>['a']*3
['a', 'a', 'a']
>>>3 in a
True
>>>
>>> for i in [1,2,3]:print i
...
1
2
3

(四)列表的函數與方法
(1)列表統計

>>>[2,4,5,4,4,4,4].count(4)
5

(2)列表index(value,start,end) start end爲閉開區間

a=[2,3,4,'b']
a.index('b')
a.index('b',2)
a.index('b',4)
a.index('b',1,5)

解釋:a.index(‘b’,1,5)
從a中查找元素b的位置,從索引1位置開始包括1,到索引位置5但不包括位置5
注:index()來檢查一個元素是否存在於一個list中並非個好主意,由於不存在就會出錯。應該先用 in 成員關係操做符(或者是 not in)檢查一下,而後在用 index()找到這個元素的位置。
代碼(能夠避免index報錯):

>>> for i in ['compact disc', 45, '8-track tape']:
...     if i in music_media:
...         print music_media.index(i)
0
1
2

(3)列表pop刪除-pop(index),index不寫默認爲最後一個元素的索引,能夠寫索引

>>> a=range(10)
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> print a.pop()
9
>>> a
[0, 1, 2, 3, 4, 5, 6, 7, 8]
>>> print a.pop(0)
0
>>> a
[1, 2, 3, 4, 5, 6, 7, 8]

(4)Cmp:列表比較,相等返回0,大於返回1,小於返回-1

>>> a=[1,2]
>>> b=[1,2,3]
>>> cmp(a,b)
-1
>>> a=[]
>>> b=[]
>>> cmp(a,b)
0

(5)列表reverse()-列表反向輸出並不會排序

>>> a=[3,4,5,6,7,8,9]
>>> a.reverse()
>>> a
[9, 8, 7, 6, 5, 4, 3]

(6)列表sort()-列表排序

>>> a=[3,4,5,6,7,8,9]
>>> a.sort()
>>> a
[3, 4, 5, 6, 7, 8, 9]

Sorted:

>>> a=[1,-1,-2,4,-3,3]
>>> b=sorted(a)
>>> print b
[-3, -2, -1, 1, 3, 4]
>>> print a
[1, -1, -2, 4, -3, 3]

注:那些能夠改變對象值的可變對象的方法是沒有返回值的!
在使用可變對象的方法如 sort(),extend()和 reverse()的時候要注意,這些操做會在列表中原地執行操做,也就是說現有的列表內容會被改變,可是沒有返回值!是的,與之相反,字符串方法確實有返回值:

四、綜合列表的推導(列表推導)
[expr for iter_var in iterable]
這個語句的核心是 for 循環, 它迭代 iterable 對象的全部條目. 前邊的 expr 應用於序列的每一個成員, 最後的結果值是該表達式產生的列表. 迭代變量並不須要是表達式的一部分.
[expr for iter_var in iterable if cond_expr]
(1)先執行for後if,而後執行的結果放到list中
(2)若是是兩個for,則先執行左邊的for,在執行右邊的for,執行的結果放到List中

>>> [x for x in range(1,10,2)]
[1, 3, 5, 7, 9]

>>> [x**2 for x in range(1,10,2)]
[1, 9, 25, 49, 81] 

>>> [i for i in range(20) if i%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 

d = {'x': 'A', 'y': 'B', 'z': 'C' }
print [k + '=' + v for k, v in d.iteritems()]

例子1:矩陣轉置:

a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
print [ [j[i] for j in a] for i in range(3)]

如下爲例子進行分析:
a=[[1,2],[4,5]]
print [ [j[i] for j in a] for i in range(2)]
分析:
for i in range(2)--->i:0 --->第一次循環
   for j in a:---第一次:[1,2]
        1,2--->[1]    
      for j in a:---第2次:[4,5]
        4,5--->[1,4]  

for i in range(2)--->i:1 --->第二次循環
   for j in a:---第一次:[1,2]
        1,2--->[2]    
      for j in a:---第2次:[4,5]
        4,5--->[2,5]
[[1,4] ,[2,5]] 

例子2:刪除列表的3,6,9,12

a=[[1,2,3],[4,5,6],[7,8,9],[10,11,12]]
print [ [i[j] for j in [1,2]]for i in a]
相關文章
相關標籤/搜索