python核心編程筆記(5)- 列表,元組
chap 6.11-6.21
1.列表:
創建(直接創建,工廠方法-list()),索引值訪問,按索引更新或者追加(append())更新,del()刪除具體索引或者整個列表,remove()直接按內容刪除,pop([index])方法刪除並返回指定對象,默認彈出最後一個
2.列表解析:這種方法是結合了列表的方括弧和 for 循環,在邏輯上描述要創建的列表的內容.
eg.
>>>[ i for i in range(8) if i % 2 == 0 ]
[0,2,4,6]
3.列表方法:
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,則列表以反序排列.
4. 對於可變對象比如列表的方法,如sort(),extend(),reverse(),這些操作是在列表原地執行,而不會有返回值,如果非要返回值的話,可以使用內建函數sorted()和reversed(),這些內建函數的工作方式是保持原有的列表不變,而是新創建了一個sorted()和reversed()的列表。這和不可變對象比如字符串的方法是不一樣的,字符串每次被更改就生成新的對象,所以調用它的方法以後,就會有新的結果作爲返回值。
5. 列表對隊列(append(e),pop(0))和棧(append(e),pop())的模擬!
6. 元組:
創建(直接創建,只有一個元素的元組需要在元組分隔符裏面加一個逗號)eg.
>>> tu = (123,)
>>> type(tu)
<type 'tuple'>
>>> tu = (123)
>>> type(tu)
<type 'int'>
訪問(切片索引訪問)
更新(元組是不可變類型,字符串中我們是通過現有字符串的片段再構造一個新字符串的方式解決的,對元組同樣)
移除(刪除元組的單獨元素士不可能的,但是可以重新生成一個新的元組是可以的)
7. 元組操作符和內建函數
標準類型操作符,序列類型操作符和內建函數:
元組的對象和序列類型操作符還有內建函數跟列表的完全一樣.你仍然可以對元組進行切片[:]操作,合併操作+,以及多次拷貝一個元組*,還可以檢查一個對象是否屬於一個元組in,進行元組之間的比較等
雖然元組對象本身是不可變的,但這並不意味着元組包含的可變對象也不可變了.雖然我們只是改變了一個可變對象,但在某種意義上講,我們也“改變”了我們的元組類型變量。
eg:
>>>t = (['xyz', 123], 23, -103.4)
>>> t[0][1]
123
>>> t[0][1] = ['hello','world']
>>> t[0][1]
['hello', 'world']
>>> t
(['xyz', ['hello', 'world']], 23, -103.4)
8. 元組是默認的集合類型,所有函數返回的多對象(不包括有符號封裝的)的類型也是元組
9. 淺拷貝:對一個對象進行淺拷貝其實是新創建了一個類型跟原對象一樣,其內容是原來對象元素的引用,換句話說,這個拷貝的對象本身是新的,但是它的內容不是.序列類型對象的淺拷貝是默認類型拷貝,並可以以下幾種方式實施:(1)完全切片操作[:],(2)利用工廠函數,比如 list(),dict()等,(3)使用 copy 模塊的 copy 函數
10. 深拷貝:也叫完全拷貝,創建一個新的容器對象,包含原有對象元素(引用)全新拷貝的引用--需要 copy.deepcopy()函數
1.列表:
創建(直接創建,工廠方法-list()),索引值訪問,按索引更新或者追加(append())更新,del()刪除具體索引或者整個列表,remove()直接按內容刪除,pop([index])方法刪除並返回指定對象,默認彈出最後一個
2.列表解析:這種方法是結合了列表的方括弧和 for 循環,在邏輯上描述要創建的列表的內容.
eg.
>>>[ i for i in range(8) if i % 2 == 0 ]
[0,2,4,6]
3.列表方法:
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,則列表以反序排列.
4. 對於可變對象比如列表的方法,如sort(),extend(),reverse(),這些操作是在列表原地執行,而不會有返回值,如果非要返回值的話,可以使用內建函數sorted()和reversed(),這些內建函數的工作方式是保持原有的列表不變,而是新創建了一個sorted()和reversed()的列表。這和不可變對象比如字符串的方法是不一樣的,字符串每次被更改就生成新的對象,所以調用它的方法以後,就會有新的結果作爲返回值。
5. 列表對隊列(append(e),pop(0))和棧(append(e),pop())的模擬!
6. 元組:
創建(直接創建,只有一個元素的元組需要在元組分隔符裏面加一個逗號)eg.
>>> tu = (123,)
>>> type(tu)
<type 'tuple'>
>>> tu = (123)
>>> type(tu)
<type 'int'>
訪問(切片索引訪問)
更新(元組是不可變類型,字符串中我們是通過現有字符串的片段再構造一個新字符串的方式解決的,對元組同樣)
移除(刪除元組的單獨元素士不可能的,但是可以重新生成一個新的元組是可以的)
7. 元組操作符和內建函數
標準類型操作符,序列類型操作符和內建函數:
元組的對象和序列類型操作符還有內建函數跟列表的完全一樣.你仍然可以對元組進行切片[:]操作,合併操作+,以及多次拷貝一個元組*,還可以檢查一個對象是否屬於一個元組in,進行元組之間的比較等
雖然元組對象本身是不可變的,但這並不意味着元組包含的可變對象也不可變了.雖然我們只是改變了一個可變對象,但在某種意義上講,我們也“改變”了我們的元組類型變量。
eg:
>>>t = (['xyz', 123], 23, -103.4)
>>> t[0][1]
123
>>> t[0][1] = ['hello','world']
>>> t[0][1]
['hello', 'world']
>>> t
(['xyz', ['hello', 'world']], 23, -103.4)
8. 元組是默認的集合類型,所有函數返回的多對象(不包括有符號封裝的)的類型也是元組
9. 淺拷貝:對一個對象進行淺拷貝其實是新創建了一個類型跟原對象一樣,其內容是原來對象元素的引用,換句話說,這個拷貝的對象本身是新的,但是它的內容不是.序列類型對象的淺拷貝是默認類型拷貝,並可以以下幾種方式實施:(1)完全切片操作[:],(2)利用工廠函數,比如 list(),dict()等,(3)使用 copy 模塊的 copy 函數
10. 深拷貝:也叫完全拷貝,創建一個新的容器對象,包含原有對象元素(引用)全新拷貝的引用--需要 copy.deepcopy()函數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.