1. 程式人生 > 其它 >list固定長度 python_第二篇:Python基礎要素

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

六、資料型別(不可變型別)

不可變型別:包括數值型(整數型,浮點型,和複數型)和字串型(字串全是紅色的)

  1. 整數型 int
  2. 浮點型float,帶有小數點及小數的數值,如:0.0,-3.14,3.4e-3,5e3(科學計數法)float("inf")#正無窮 float("-inf")#負無窮 1+float'inf)2*float'inf')
  3. 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()..…

  1. 函式的定義
def<函式名>(<引數列表>):
    <函式體>
return<返回值列表>    #返回,用return將實參返回形參

2. 函式的呼叫過程

呼叫程式在呼叫函式處暫停執行

呼叫時將引數(實參)賦值給函式的引數(形參)

3. 執行函式體

返回函式結果,回到呼叫處繼續執行

4. 函式的引數傳遞

函式通過引數與呼叫程式傳遞資訊,函式內和函式外的引數需要賦值和返回值(return)

5. 變數的作用範圍

  • 區域性,函式內的變數作用範圍只在函式內
  • 全域性,所有函式外的變數,在所有函式中都能使用(用global宣告)

函式的形參只接收實參的值,給形參賦值並不影響實參


Part 2:規則

一、Python基本語法規則

  1. 註釋 # 一方面是開發者做備註,一方面是維護者易於知道程式操作流程。必須帶#,否則程式會報錯,快捷鍵 ctrl+/,多行註釋也OK,做法是:同時選擇多行,輸入快捷鍵。
  2. 程式碼分隔 (反斜線 )繼續上一行(用於某行程式碼太長,不方便看的情況)
  3. 文字行分割 n 輸出的時候文字分成兩行
  4. 多行文字賦值 ''' 用三個單引號把文字前後包起來
  5. 多個命令分隔 ;多行語句寫在一行 要用分號隔開,切記不能用空格
  6. 分隔程式碼塊 :(頭&體)
  7. 縮排 (手動請敲Tab)系統會自動加縮排,用來分隔條件和頭尾,增加可讀性
  8. 空行(用於分割,函式與類,閱讀體驗好,空行也是程式的一部分)
  9. 命名 為程式元素關聯一個名稱,要保證唯一性
  10. 佔位 pass 還沒有想好下一步怎麼操作,但是先佔個坑

二、條件判斷

  • 先if
  • 再elif
  • 最後else

常用,三元表示式:為真時的結果 if 判定條件 else 為假時的結果

三、迴圈

  1. 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 9f742d099c12dcaacbdb82e5ea0b58e6.png

未完待續。。。