python內建的 三種常用資料結構 : 列表 (list )、元組( tuple )和 字 典( dict )。列表和元組比較相似,它們都按順序儲存元素 , 每個元素都有自己的索引,因此列表和元組都可通過索引訪問元素 。二 者的 區 別 在 於元組是不可修改的,但列表是可修改的 。 字典則以 key-value的形式儲存資料 。
指的是 一 種包含多項資料的資料結構,序列包含的 多 個資料項(也叫成員)按順序排列,可通過索引來訪問成員 。常見序列型別包括字串 、列表和元組等
建立列表和元組:
建立列表使用方括號 , 建立元組使用圓括號,並在括號中列出元組 的元素,元素之間以英文逗號隔 開
my_list = ['crazyit',20,'python']
my_tuple = ('crazyit',20,'python')
只要不涉及改變元素的操作 ,列 表和元組的用法是通用的。列表的元素相當於 乙個變數 ,程式既可使用它的值,也可對元素賦值;元組的元素則相當於乙個常量 , 程式只能使用它的值 , 不能對它重新賦值。
子串行:
[start : end : step] step 表示步長,因此 step 使用負數沒有意義。
加法,乘法:
列表和元組支援加法運算,加法的和就是返回乙個列表或元組,其包含兩個列表或元組的元素 。需要指 出的是,列 表只能和列表相加;元組只能和元組相加;元組不能 直接和列 表相加。
in 運算子:
長度、最大值和最小值:
內建的 len()、 max()、 min()全域性函式來獲取元組或列表的長度、最大值和最小值 。
序列封包和序列解包:
程式把多個值賦給乙個變數時, python 會自動將多個值封裝成元組。這種功能被稱為序列封包 。
程式允許將序 列 (元組或列表等)直接賦值給多個變數,此時序列的各元素會被依次賦值給每個變數(要求序列的元素個數和變數個數相等)。這種功能被稱為序列解包。
#tuple封包
values = 10,20,30
print(values)#(10,20,30)
print(type(values))##tuple解包
a_tuple = tuple(range(1,10,2))
a,b,c,d,e = a_tuple
print(a,b,c,d,e)#1 3 5 7 9
#list解包
a_list = ['fkit', 'crazyit']
a_str, b_str = a_list
print(a_str, b_str)#fkit crazyit
#實現交換變數的值
x,y,z = 10,20,30
x,y,z = y,z,x #20 30 10
#以只解出部分變數,剩下的依然使用列表變 量儲存
#在左邊被賦值 的 變數之前新增「*」,那麼該變數就代表 一 個列表
first, decod ,*rest = range(10)
print(first)#0
print(rest)#[2,3,4,5,6,7,8,9]
list() 函式可用於將元組 、區間 ( range )等物件轉換為列表。
>>> a_tuple = ('1',20,-1.2)
>>> a_list = list(a_tuple)
>>> a_list
['1', 20, -1.2]
>>> a_range = range(1,5)
>>> a_range
range(1, 5)
>>> b_list = list(a_range)
>>> b_list
[1, 2, 3, 4]
>>> c_list = list(range(4,20,3))
>>> c_list
[4, 7, 10, 13, 16, 19]
python 也 提供了乙個 tuple() 函式 , 該 函式可用 於將列表、 區 間 ( range )等物件轉換為元組 。
>>> a_list = ['crazyit',20,-2]
>>> a_list
['crazyit', 20, -2, 'fkit']
>>> a_tuple = (3.4,5.6)
>>> a_list
['crazyit', 20, -2, 'fkit', (3.4, 5.6)]
>>> a_list
['crazyit', 20, -2, 'fkit', (3.4, 5.6), ['a', 'b']]
從上面**可以 看出 ,為列 表追加另乙個列表 時, python 會將被迫加 的列 表當 成 一 個整體 的元素,而不是追加目標列表中的元素 。 如果希望不將被追加的列表當成 一 個整體,而只是追加列表中的 元素 ,則可使用列表的 extend()方法。如下:
>>> b_list = ['a',30]
>>> b_list.extend((-2,3.1))
>>> b_list
['a', 30, -2, 3.1]
>>> b_list.extend(['c','r'])
>>> b_list
['a', 30, -2, 3.1, 'c', 'r']
刪除列表元素:
del 語句不僅可以刪除列表元素,也可以刪除普通變數
remove ()方法來刪除列表元素,該方法並不是根據索引
來刪除元素的,而是根據元素本身來執行刪除操作的。該方法只刪除第乙個找到的元素,如果找不到該元素,該方法將會引發 va lueerror 錯誤 。
clear() 方法,正如它的名字所暗示 的, 該方法用於清空 列 表 的所有元素
修改列表元素:
如果將列表其中一段賦值為空列表,就變成了從列表中刪除元素.
列表的其他常用方法:
>>> #list模擬棧
...
>>> stack =
>>> stack
['fkit', 'crazyit', 'charlie']
>>> stack.pop()
'charlie'
>>> stack
['fkit', 'crazyit']
>>> stack.pop()
'crazyit'
>>> stack
['fkit']
建立字典:可使用花括 號語法來創 建字典 ,也可使用 dict() 函式來建立字典。
需要指出的是,元組可以作為 dict 的 key ,但列表不能作為元組的 key 這是由於 diet 要求 key必須是不可變型別,但列表是可變型別,因此列表不能作為元組的 key 。
>>> dict1 =
>>> dict1
>>> dict2 =
>>> dict2
>>> dict3 =
traceback (most recent call last):
file "", line 1, in typeerror: unhashable type: 'list'
>>> vagetables = [('celery',1.58),('brocoli',1.29),('lettuce',2.19)]
>>> dict4 = dict(vagetables)
>>> dict4
>>> cars = (('celery',1.58),('brocoli',1.29),('lettuce',2.19))
>>> dict5 = dict(cars)
>>> dict5
>>> c = (['celery',1.58],['brocoli',1.29],['lettuce',2.19])
>>> dict6 = dict(c)
>>> dict6
>>> d = [['celery',1.58],['brocoli',1.29],['lettuce',2.19]]
>>> dict7 = dict(d)
>>> dict7
>>> e = [['celery',1.58],['brocoli',1.29],('lettuce',2.19)]
>>> dict8 = dict(e)
>>> dict8
在使用 dict()函 數創 建字典時 , 可以傳入多個列表或元組引數作為 key-value 對 , 每個列表或元組將被當成乙個 key-value 對,因此這些列表或元組都只能包含兩個元素。
字典的基本用法:
可以這樣說,字典相當於索引是任意不可變型別的列表:而列表則相當於 key 只能是整數的字典。因此 ,如 果程式中要使用的字典的 key 都 是整數型別, 則可 考慮能否換成列表。此外,還有 一 點需要指出,列表的索引總是從 0 開始、連續增大的;但字典的索引即使是整數型別, 也不 需要從 0 開始,而且不需要連續。因此,列表不 允許對不存在的索 引 賦值:但字典則 允許直接對不存在的 key 賦值一一這樣就會為字典增加乙個 key-value 對 。
《OC瘋狂講義》筆記(三)
1 類方法 1 什麼是類方法 物件方法 返回值型別 方法名 形參的型別 形參名 類方法 返回值型別 方法名 形參的型別 形參名 2 類方法怎麼去定義 返回值型別 方法名 形參的型別 形參名 3 類方法的使用 呼叫 物件方法 物件名 方法名 實參 類方法 類名 方法名 實參 4 使用類方法的好處 1 ...
《OC瘋狂講義》筆記(五)
1 oc中的點語法 點語法 物件名.成員變數名 點語法不是訪問成員變數,而是方法的呼叫 它是乙個編譯器特性 點語法作用 可以替換傳統的get和set方法的呼叫 點語法的前提 首先得先有 get和set方法 點語法實質 呼叫get和set方法 如果點語法出現在 的左邊,表示設定值,相當於呼叫了set方...
《瘋狂Python講義》之異常處理
異常機制已經成為衡量一門程式語言是否成熟的標準之一,使用異常處理機制的python程式有更好的容錯性,更加健康。python的異常處理機制可以讓程式具有極好的容錯性。使用try except捕獲異常 語法結構如下 try 業務實現 except error1,error2,as e alert 輸入...