列表和字符串類型很相似,是同樣的序列式數據類型。
但是字符串只能由字符組成,列表可以保留任意數目的Python對象的靈活的容器。
Python的列表比C的數組要靈活,數組里面只能是一種類型,列表可以有多種。
列表可以執行pop,empt,sort,reverse等操作,可以添加或減少元素。可以和其他的列表結合或者把一個列表分成幾個,可以對單獨的元素執行insert,update或者remove操作。
創建列表是用[]來定義的,也可以用工廠方法創建
>>> aList = [12,'abc',1.23,['list','in']]>>> anotherList = [None, 'something']>>> PRint aList[12, 'abc', 1.23, ['list', 'in']]>>> print anotherList[None, 'something']>>> aList = []>>> print aList[]>>> list('Python')['P', 'y', 't', 'h', 'o', 'n']
訪問列表的值用索引或者切片的方法。這里不贅述。
更新列表
可以像C一樣,指定一個索引或者索引范圍來更新元素。或者使用append()方法來追加元素到列表中去
>>> aList = list('a1bc')>>> print aList['a', '1', 'b', 'c']>>> aList[0] = 1.2>>> print aList[1.2, '1', 'b', 'c']>>> aList[1:2] = ['x',3]>>> print aList[1.2, 'x', 3, 'b', 'c']>>> aList.append(4.56)>>> print aList[1.2, 'x', 3, 'b', 'c', 4.56]
刪除列表中的元素或者列表(本身)
要刪除元素的索引可以使用del語句,否則使用remove()方法
>>> aList[123, 'abc', 'float replacer', ['inner', 'list'], (7-9j)]>>> del aList[1]>>> aList[123, 'float replacer', ['inner', 'list'], (7-9j)]>>> aList.remove(123)>>> aList['float replacer', ['inner', 'list'], (7-9j)]
還可以用pop()方法來刪除并從列表中返回一個特定對象。
一般來說不需要去刪除一個對象列表,如果想明確地刪除一整個列表可以用del語句:del aList
Python沒有專門用于列表類型的操作符,但是有屬于自己的方法。列表有列表解析,是結合了列表的方括弧和for循環。以后會再專門學到列表解析。屆時寫一個列表解析的內容,這里只寫一個簡單的例子:
>>> [ i * 2 for i in [8, -2, 5] ][16, -4, 10]>>> [ i for i in range(8) if i % 2 == 0 ][0, 2, 4, 6]
內建函數
一些序列類型的函數在列表里非常有用如:
max()、min()、sorted()、reversed()、enumerate()、zip()還有sum()
列表類型內建函數 只有range()函數
列表類型的內建函數
列表有自己的方法,在之后學習??梢杂胐ir()方法來得到一個列表對象的所有方法和屬性。
>>> dir(list)['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delslice__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']
| 方法 | 作用 |
| list.append(obj) | 向列表中添加一個對象obj |
| list.count(obj) | 返回一個對象obj 在列表中出現的次數 |
| list.extend(seq) | 把序列seq 的內容添加到列表中 |
| list.index(obj, i=0,j=len(list)) | 返回list[k] == obj 的k 值,并且k 的范圍在 i<=k<j;否則引發ValueError 異常. |
| list.insert(index, obj) | 在索引量為index 的位置插入對象obj. |
| list.pop(index=-1) | 刪除并返回指定位置的對象,默認是最后一個對象 |
| list.remove(obj) | 從列表中刪除對象obj |
| list.reverse() | 原地翻轉列表 |
| list.sort(func=None,key=None,reverse=False) | 以指定的方式排序列表中的成員,如果func 和key 參數指定,則按照指定的方式比較各個元素,如果reverse 標志被置為True,則列表以反序排列. |
核心筆記:
可以改變對象值的可變對象的方法是沒有返回值的!
Python 初學者經常會陷入一個誤區:調用一個方法就返回一個值.最明顯的例子就是
sort():
>>> music_media.sort()# 沒有輸出?>>>
在使用可變對象的方法如sort(),extend()和reverse()的時候要注意,這些操作會在列表
中原地執行操作,也就是說現有的列表內容會被改變,但是沒有返回值!是的,與之相反,字符串
方法確實有返回值:
>>> 'leanna, silly girl!'.upper()'LEANNA, SILLY GIRL!'
溫習一下,字符串是不可變的 -- 不可變對象的方法是不能改變它們的值的,所以它們必須
返回一個新的對象.
如果用列表一定要返回一個對象,可以使用reversed()和sorted()。
列表特殊特性
用列表構建其他數據結構
用列表容器和可變的特性可以輕松的構造其他數據結構,如堆棧和隊列。
具體實現過程不在博文里贅述了。
新聞熱點
疑難解答