list固定長度 python_第二篇:Python基礎要素
技術標籤:list固定長度 python
Part 1:元素
一、識別符號
識別符號由字母、數字、下劃線組成。在python中,所有識別符號可以包括英文、數字以及下劃線(_),但不能以數字開頭。(python中的識別符號區分大小寫)
其中,以下劃線開頭的識別符號是有特殊意義的。以單下劃線開頭(_foo)的代表不能直接訪問的類屬性,需通 過類提供的介面進行訪問,不能用"from xxx import *"而匯入;以雙下劃線開頭的(__foo)代表類的私有成員;以雙下劃線開頭和結尾的(__foo__)代表python裡 特殊方法專用的標識,如__init__()代表類的建構函式。
二、保留字元(特殊識別符號,包括關鍵字,BIFs(下文詳細說明),專用下劃線識別符號)
命名你的識別符號時不能用以下這些關鍵詞
- 常量True,False,None
- 函式,類,物件和模組 def , class,import,from,del,global ,return ,lambda
- 判斷If,elif,else,is,in,assert , and , or , not
- 迴圈for,while,continue,break,pass
- 異常with , raise,try,except,finally,as
三、BIFs: Python的(自帶的便捷命令)
常稱作“自帶電池”,包括:
- 檢視:dir(__builtins__)
- IPO: print(), open(), input()
- 列表與幫助:dir()與help()
- 型別與身份: type(),id(),memoryview(),isinstance(), issubclass(),
- 數學運算類: sum,pow,round,min,max,hash(雜湊計算)等
- 型別轉換; int,bin,hex,oct,str,float,list,bytes等(進位制轉換)
- 序列: len(), range(), zip(), map(), reduce(), filter(), reversed() (迴轉), sorted(), enumerate()
四、標準操作符(運算的快捷鍵:CTRL+INTER)
- 算術運算子+, -, *, /,//取整數, %取模(餘數 ), **求冪(次方)
- 比較運算子 !=不(等),==(等於), >,>=,<,<=
- 賦值運算子 =, (增量賦值: +=,-=,*=,/=,**=,//=)
- 邏輯運算子 and/or/not
- 成員運算子in/not in
- 身份運算子is/is not
五、變數賦值操作
- 簡單賦值a=100
- 多重賦值a=b=c=100
- 多元賦值a,b,c=91,92,93
- 變數交換賦值a,b,c=b,c,a
六、資料型別(不可變型別)
不可變型別:包括數值型(整數型,浮點型,和複數型)和字串型(字串全是紅色的)
- 整數型 int
- 浮點型float,帶有小數點及小數的數值,如:0.0,-3.14,3.4e-3,5e3(科學計數法)float("inf")#正無窮 float("-inf")#負無窮 1+float'inf)2*float'inf')
- complex複數(包含實部和虛部)寫法為:5+22j
#型別轉換:
- 整數->浮點數,float(4)->4.0
- 浮點數->整數,int(3.14)->3,只會保留整數部分
- 字串->整數,字串->浮點數,int("3)->3,float(“3.14)->3.14
#如何判斷型別?
type()函式
#進位制轉換
a=ob0101#二進位制,bin()
b=oo0101#八進位制,oct()
c=ox0101#十六進位制,hex()
#絕對值
abs(a)
#四捨五入
round(a,1)
七、資料型別(可變型別)
容器型別(可變型別):包括列表 List 元組 Tuple 集合 Set 字典 Dictionary
1.序列
(列表、元組和字串都是序列,字串是字元的序列,列表和元祖是任意型別的序列)
序列的兩個特點:
1.索引操作符,從序列中抓取一個特定專案
2.和切片操作符,獲取序列的一個切片,即一部分序列
Python一些內建函式
1、cmp(A, B):比較可為list、tuple等的A、B,A>B為1,A=B為0,小於為-1
2、len(obj): 計算元素個數。
3、max(obj):返回元素最大值。
4、min(obj):返回元素最小值。
5、reversed(obj): 對元素進行翻轉
6、enumerate(obj): 遍歷list的元素,返回序號及其對應的元素 for x,y in list:
7、zip():打包成tuple(元組),然後返回由這些tuples組成的list(列表)
2. 列表list,用中括號“[ ]”表示
列表(list)是有序的元素集合可通過索引訪問單個元素,如L[2],L[-1];也可通過區間索引訪問子列表內容,如L[2:5],L[-3:]
1.任意物件的有序集合
列表是一組任意型別(數字,字母)的值,按照一定順序組合而成的
2.通過偏移讀取
組成列表的值叫做元素(Elements)。每一個元素被標識一個索引,第一個索引是0,序列的功能都能實現
3.可變長度,異構以及任意巢狀
列表中的元素可以是任意型別,甚至是列表型別,也就是說列表可以巢狀
4.可變的序列
支援索引、切片、合併、刪除等等操作,它們都是在原處進行修改列表
5.物件引用陣列
列表可以當成普通的陣列,每當用到引用時,Python總是會將這個引用指向一個物件,所以程式只需處理物件的操作。當把一個物件賦給一個數據結構元素或變數名時,Python總是會儲存物件的引用,而不是物件的一個拷貝
- 列表操作符含義:
list1+list2 #合併(連線)兩個列表
list1*n #重複n次列表內容
len(list1) #返回列表長度(元素個數)
X in list1| #檢查元素是否在列表中
list1.append(x) #將x新增到到表末尾
list1.sort) #對列表元素排序
list1.reverse) #將列表元素逆序
list1.index(x) #返回第一次出現元素x的索引值
list1.insert(i,x) #在位置i處插入新元素x
1ist1.count(x) #返回元素x在列表中的數量
list1.remove(x) #刪除到表中第一次出現的元素x
list1.pop(i) #取出到表中i依置上的元素,並將其刪除
- 案例分析:
1. #!/usr/bin/env python
2. #coding:utf-8
3.'''
4. FuncName: study_list.py
5. Desc: list 內建函式
6. Date: 2016-03-17 14:00
7. Author: johnny
8.'''
9.L.append(var) # 追加元素,加在最後
10.L.insert(index,var) # 在index的位置追加元素,位置就是索引
11.L.pop(var) # 從list中刪除最後一個元素,並返回該元素
12.L.remove(var) # 刪除第一次出現的該元素
13.L.count(var) # 該元素在列表中出現的個數
14.L.index(var) # 該元素的位置(索引號),無則拋異常
15.L.extend(list) # 追加list,即合併list到L上,兩個列表合併
16.L.sort() # 排序
17.L.reverse() # 原地翻轉列表,從前到後變成從後向前
18.l = [1,2,3,4,['hello','johnny'],'blog.csdn.net/z_johnny'] # 建立list
19.l[1:5:2] #list的切片,切一部分,範圍為索引[1,5),即1、2、3、4不包括5,隔2取1個值 l[1:5:2] == [2, 4]
20.l[1] #list的索引,左1索引為0,右1索引為-1,l[1] == 2
21.l[4][1] # 列表支援巢狀,l[4][1] == 'johnny'
list的官方內建函式可用dir(list)與help(list) 命令進行檢視
3. 元祖tuple,用小括號“( )”表示
- 任意物件的有序集合 (與列表相同)
- 通過偏移存取 (與列表相同)
- 屬於不可變序列型別
類似於字串,但元組是不可變的,不支援在列表中任何原處修改操作,不支援任何方法呼叫
- 固定長度、異構、任意巢狀
固定長度即元組不可變,在不被拷貝的情況下長度固定,其他同列表
- 物件引用的陣列
與列表相似,元祖是物件引用的陣列
- 和list相比
1.比列表操作速度快 ;2.對資料“防寫“ ;3.可用於字串格式化中 ;4.可作為字典的key
- 字典操作符含義:
1.#!/usr/bin/env python
2.#coding:utf-8
3.'''
4. FuncName: study_tuple.py
5. Desc: tuple 內建函式
6. Date: 2016-03-17 14:00
7. Author: johnny
8.'''
9.t.count(var) # 該元素在元組中出現的個數
10.t.index(var) # 該元素的位置(索引號),無則拋異常
11.t = (1,2,3,4,['hello','johnny'],'blog.csdn.net/z_johnny') # 建立tuple
12.tu = (5,) # 只含有一個元素的元祖,必須加逗號“,”
13.t[1:5:2] #tuple的切片,切一部分,範圍為索引[1,5),即1、2、3、4不包括5,隔2取1個值 t[1:5:2]== (2, 4)
14.t[1] # tuple的索引,左1索引為0,右1索引為-1,t[1] == 2
15.t[4][1] # 同列表一樣支援巢狀,t[4][1] == 'johnny'
tuple的官方內建函式可用dir(tuple)與help(tuple) 命令進行檢視
3. 字典dict,用大括號“{key,value}”表示
- 通過鍵而不是偏移量來讀取
字典就是一個關聯陣列,是一個通過關鍵字索引的物件的集合,使用鍵-值(key-value)進行儲存,查詢速度快
- 任意物件的無序集合
字典中的項沒有特定順序,以“鍵”為象徵
- 可變長、異構、任意巢狀
同列表,巢狀可以包含列表和其他的字典等
- 屬於可變對映型別
因為是無序,故不能進行序列操作,但可以在遠處修改,通過鍵對映到值。字典是唯一內建的對映型別(鍵對映到值的物件)
- 物件引用表
字典儲存的是物件引用,不是拷貝,和列表一樣。字典的key是不能變的,list不能作為key,字串、元祖、整數等都可以
- 和list比較,dict有以下幾個特點:
1.查詢和插入的速度極快,不會隨著key的增加而增加
2.需要佔用大量的記憶體,記憶體浪費多
而list相反:
1.查詢和插入的時間隨著元素的增加而增加
2.佔用空間小,浪費記憶體很少
所以,dict是用空間來換取時間的一種方法
案例分析:
1.#!usr/bin/env python
2.#coding:utf-8
3.'''
4. FuncName: study_dict.py
5. Desc: dict 內建函式
6. Date: 2016-03-17 14:00
7. Author: johnny
8.'''
9.d = {'Name': 'Johnny', 'Address':'blog.csdn.net/z_johnny'} # 建立dict
10.d['Name'] # 找出key為Name的值 d['Name'] == 'Johnny'
11.d['Name'] = hello # 更新key為Name的值 Name對應的值從Johnny改為hello
12.del d['Address'] # 刪除key為Name的值和該key d = {'Name': 'Johnny'}
13.d.clear() # 刪除字典d中的所有元素 d = {}
14.d.pop('Name') # 刪除字典d中key為'Name'的值和該鍵
15.d.copy() # 返回字典d的淺複製副本
16.d.fromkeys(S[,v]) # 建立一個新的字典,設定鍵為seq 和值為value
17.d.get(key, default=None) # 返回該鍵key的值,若沒有該鍵,則返回None
18.d.has_key(key) # 如果在字典d中存在鍵key,則返回true,否則返回 false
19.d.items() # 返回字典的(鍵,值)元組對的列表
20.d.keys() # 返回字典的鍵的列表
21.d.values() # 返回字典d的值列表
22.d.setdefault(key, default=None) # 類似get()
23. # 但會設定d[key]=default 如果key不在字典d中
24.d.update(d2) # 將字典d2的鍵值對增加到字典d中
25.d.iteritems() #(鍵,值)項的一個迭代器
26.d.iterkeys() # 字典d中鍵的一個迭代器
27.d.itervalues() # 字典d中值的一個迭代器
28.d.popitem() # 刪除元組返回鍵、值,若字典d為空會報key錯
29.d.viewitems() # 像物件一樣提供字典d中項的一個檢視
30.d.viewkeys() # 像物件一樣提供字典d中key的一個檢視
31.d.viewvalues() # 像物件一樣提供字典d中value的一個檢視
dict的官方內建函式可用dir(dict)與help(dict) 命令進行檢視
4. 集合set,用 小括號“( )”表示
- 是一組key的集合,但不儲存value,並且key不能重複
建立一個set,需要提供一個list作為輸入集合,s = set([1,2,3]),注意,傳入的引數 [1, 2, 3] 是一個list,而顯示的 set([1, 2, 3]) 只是告訴你這個set內部有1,2,3這3個元素,顯示的[ ]不表示這是一個list
- 重複元素在set中自動被過濾
set可以看成數學意義上的無序和無重複元素的集合,因此,兩個set可以做數學意義上的交集、並集等操作
5.還有一種集合是forzenset( ),是凍結的集合
它是不可變的,存在雜湊值(散列表(Hash table,也叫雜湊表),是根據關鍵碼值(Key value)而直接進行訪問的資料結構。也就是說,它通過把關鍵碼值對映到表中一個位置來訪問記錄,以加快查詢的速度。這個對映函式叫做雜湊函式,存放記錄的陣列叫做散列表。
給定表M,存在函式f(key),對任意給定的關鍵字值key,代入函式後若能得到包含該關鍵字的記錄在表中的地址,則稱表M為雜湊(Hash)表,函式f(key)為雜湊(Hash) 函式)
好處是它可以作為字典的key,也可以作為其它集合的元素。缺點是一旦建立便不能更改,沒有add,remove方法
- 和dict對比
1.set和dict的唯一區別僅在於沒有儲存對應的value
2.set的原理和dict一樣,同樣不可以放入可變物件,因為無法判斷兩個可變物件是否相等,也就無法保證set內部“不會有重複元素”
#!usr/bin/env python
#coding:utf-8
'''
FuncName: study_set.py
Desc: set 內建函式
Date: 2016-03-17 14:00
Author: johnny
'''
s = set([1,2,3]) # 建立一個數值set,有1,2,3三個元素s == set([1, 2, 3])
se = set('Hello') # 建立一個唯一字元的集合s == set(['H', 'e', 'l', 'o'])
a = s | se # s 和 se 的並集 set([1, 2, 3, 'e', 'H', 'l', 'o'])
b = s & se # s 和 se 的交集 set([]) 沒有相同項為空
c = s – se # 求差集(項在s中,但不在se中) set([1, 2, 3])
d = s ^ se # 對稱差集(項在s或se中,但不會同時出現在二者中)
# set([1, 2, 3, 'e', 'H', 'l', 'o'])
s.issubset(t) # 如果s是t的子集,則返回True,否則返回False
s.issuperset(t) # 如果t是s的超集,則返回True,否則返回False
s.union(t) # 返回一個新集合,該集合是s和t的並集
s.intersection(t) # 返回一個新集合,該集合是s和t的交集
s.difference(t) # 返回一個新集合,該集合是 s 的成員,但不是 t 的成員
s.symmetric_difference(t) # 返回一個新集合,該集合是s或t的成員,但不是s和t共有的成員
s.copy() # 返回一個新集合,它是集合s的淺複製
s.update(t) # 用t中的元素修改s,即s現在包含s或t的成員
s.intersection_update(t) # s中的成員是共同屬於s和t中的元素
s.difference_update(t) # s中的成員是屬於s但不包含在t中的元素
s.symmetric_difference_update(t) # s中的成員更新為那些包含在s或t中,
# 但不是s和t共有的元素
s.add(obj) # 在集合s中新增物件obj
s.remove(obj) #從集合s中刪除物件obj,如果obj不是集合s中的元素
# (obj not in s),將引發KeyError
s.discard(obj) # 如果obj是集合s中的元素,從集合s中刪除物件obj
s.pop() # 刪除集合是中的任意一個物件,並返回它
s.clear() # 刪除集合s中的所有元素
set的官方內建函式可用dir(set)與help(set) 命令進行檢視
七、函式
對一組表達特定功能表達式的封裝,將特定功能程式碼編寫在一個函式裡,便於閱讀和複用
,使程式模組化。
Python內建函式input(),print(),eval()..…
- 函式的定義
def<函式名>(<引數列表>):
<函式體>
return<返回值列表> #返回,用return將實參返回形參
2. 函式的呼叫過程
呼叫程式在呼叫函式處暫停執行
呼叫時將引數(實參)賦值給函式的引數(形參)
3. 執行函式體
返回函式結果,回到呼叫處繼續執行
4. 函式的引數傳遞
函式通過引數與呼叫程式傳遞資訊,函式內和函式外的引數需要賦值和返回值(return)
5. 變數的作用範圍
- 區域性,函式內的變數作用範圍只在函式內
- 全域性,所有函式外的變數,在所有函式中都能使用(用global宣告)
函式的形參只接收實參的值,給形參賦值並不影響實參
Part 2:規則
一、Python基本語法規則
- 註釋 # 一方面是開發者做備註,一方面是維護者易於知道程式操作流程。必須帶#,否則程式會報錯,快捷鍵 ctrl+/,多行註釋也OK,做法是:同時選擇多行,輸入快捷鍵。
- 程式碼分隔 (反斜線 )繼續上一行(用於某行程式碼太長,不方便看的情況)
- 文字行分割 n 輸出的時候文字分成兩行
- 多行文字賦值 ''' 用三個單引號把文字前後包起來
- 多個命令分隔 ;多行語句寫在一行 要用分號隔開,切記不能用空格
- 分隔程式碼塊 :(頭&體)
- 縮排 (手動請敲Tab)系統會自動加縮排,用來分隔條件和頭尾,增加可讀性
- 空行(用於分割,函式與類,閱讀體驗好,空行也是程式的一部分)
- 命名 為程式元素關聯一個名稱,要保證唯一性
- 佔位 pass 還沒有想好下一步怎麼操作,但是先佔個坑
二、條件判斷
- 先if
- 再elif
- 最後else
常用,三元表示式:為真時的結果 if 判定條件 else 為假時的結果
三、迴圈
- for迴圈
使用for語句可以迴圈遍歷整個序列的內容
使用方法:
for<x>in<list1>:
<body>
迴圈變數x在每次迴圈時,被賦值成對應的元素內容
2.while迴圈
根據判斷條件確定一段程式是否再次執行一次或者多次
使用方法:
while(<條件>):
<語句塊1>
<語句塊2>
當條件為真(True)時,執行語句塊1;為假(False)時,退出迴圈
3.for與while迴圈的區別
- for迴圈的次數固定,即所遍歷的序列長度
- while為無限迴圈,可能出現死迴圈
- range(n)返回一個可迭代的物件
- list(range(n))將迭代型別轉換為列表型別
Tips: python 遵循左閉右開原則,如range(3,7)結果會是3,4,5,6
四、遞迴(迭代函式)
- 函式定義中呼叫函式自身的方式稱為遞迴
- 能夠非常簡潔地解決重要問題
- 每次函式呼叫時,函式引數會臨時儲存,相互沒有影響·達到終止條件時,各函式逐層結束運算,返回計算結果
- 要注意終止條件的構建,否則遞迴無法正常返回結果
五、異常處理機制
- 引入異常處理機制可以用來解決程式執行時的錯誤
- 語法
try:<body>
except:<error type1>
<handler1>
- 當Python遇到try語句,先嚐試執行try包含的程式碼塊,如果沒有錯誤發生,執行try-except後面的語句;如果發生錯誤,Python尋找一個符合該錯誤的異常語句,然後執行相應的t的處理程式碼。
附:網路資源,課程連結:
Python資料分析 升級版 - 七月線上www.julyedu.com未完待續。。。