標籤:
一、物件類型
1、數字
數字:不可變
2、字串
字串:不可原處修改【修改需要建立新的對象】,有順序,支援求長(len),合并(+),重複(*),索引S[0],分區(S[1:3]],成員測試(in),迭代(for);
特有的尋找find,替換replace,拆分split;支援list(S)將字串分解成一個字元列表,tuple(S)將字串分解成一個字元組成的元組,複製可用分區和copy標準庫,
不支援排序sort和刪除del(因為不可原處修改)
3、元組
元組:不可以原處修改,有順序,支援求長(len),合并(+),重複(*),索引T[0],分區T[2:-1],成員測試(in),迭代(for) ,可以嵌套列表,字典,元組,
支援list(T)將元群組轉換列表,轉換的時候產生新的對象。 複製可用分區和copy標準庫;不支援排序sort和刪除del(不可變)【沒有方法】
注意:元組的不可變性只適用與元組本身頂層而非其內容,元組的內部的列表,字典可以像往常那樣修改。
4、列表
列表:可在原處修改,有順序,支援求長(len),合并(+),重複(*),索引L[0],分區L[0:3],成員測試(in),迭代(for),包含任何對象,可以嵌套列表,字典,元組。
可變體現在支援 增加單個對象:L.append(4),增加多個對象:L.extend([5,6,7]),在I位置插入X:L2.insert(I,X),索引賦值:L2[i]=1,分區賦值:L2[i:j]=[4,5,6]
移除資料(參數對象):L.remove(‘b‘),移除資料(參數序列) :L.pop(‘b‘),裁剪索引:del L[K],裁剪分區del L[i:j],裁剪列表:del L,
排序:L2.sort(),順序反轉:L.reverse(),通過對象尋找對象索引(和索引相反的操作):L.index(‘abc‘),複製可用分區和copy標準庫
支援rang(起,始,步進)建立列表
支援list(L)本身
可以將列錶轉換為元組:T=tuple(L)#轉換的時候產生新的對象.
可以將元群組轉換為列表:list(T)#產生新的列表對象
不能先建立空列表再添加元素。
列表解析
>>> L=[1,2,3,4,5]
>>> L=[x+10 for x in L]
將列表中行的分行符號去掉
>>> lines=[line.rstrip() for line in lines]
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘)]
擴充列表解析
重複上一個例子,但我們只需開頭不為#的文字行。
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘) if line[0]!=‘#‘]
完整的語句可接納任意數目的for分句,而每個分區都可以結合一個可選的if分句
>>> [x+y for x in ‘abc‘ for y in ‘lmn‘]
[‘al‘, ‘am‘, ‘an‘, ‘bl‘, ‘bm‘, ‘bn‘, ‘cl‘, ‘cm‘, ‘cn‘]
對一個字串中的每個x,以及另一個字串中的每個y,建立x+y合并的列表。收集兩個字串字元的排列組合
5、字典
字典:可在原處修改[通過鍵修改],無順序,支援求長(len),索引D[‘name‘],成員測試(in),迭戈(for)(keys,values方法返回的列表支援),del D[’name‘],del D,
不支援合并,重複,分區,包含任何對象,可以嵌套列表,字典,元組。 不支援排序sort.
支援list(D),擷取字典KEY的列表 複製可用.Dcopy(),copy標準庫
可以建立空字典,然後再添加元素.
>>> D={}
>>> D={‘one‘:1}
>>> D
{‘one‘: 1}
列表不能通過這樣的方法來增加資料,列表只能通過append方法,列表之能通過L[1]=‘A‘這樣的方法來修改已存在序列的資料。
6、對比
對象靈活性
* 列表,字典,元組可以包含任何種類的對象。
* 列表,字典,元組可以任意嵌套
* 列表,字典可以動態擴大和縮小。
有些地方的確需要拷貝,那麼可以明確要求
* 沒有限制條件的分區運算式(L[:])能夠賦值序列
* 字典copy方法(D.copy())能夠複製字典
* 有寫內建函數(例如,List)能夠生產拷貝(list(L))
* copy標準庫模組能夠產生完整拷貝
二、賦值運算式和列印
1、賦值運算
變數命名規則
語句:(底線或者字母)+(任意數目的字母,數字或底線)
注意:區分大小寫,禁止使用保留字,前後有底線的變數名(__X__)是系統定義的變數名,對解譯器有特殊意義
變數名沒有類型,但對象有
運算 解釋
diege=‘diege‘ 基本形式
diege,lily=‘yum‘,‘wang‘ 元組賦值運算(位置性) 序列指派陳述式
[diege,lily]=[‘yum‘,‘YUM‘] 列表賦值運算(位置性) 序列指派陳述式
a,b,c=string[0],string[1],string[2] 進階賦值
((a,b),c)=(‘DI‘,‘GE‘) 可以賦值嵌套序列
a,b,c,d=‘dieg‘ #序列賦值運算,通用性 #MS不行,數量要一致。 序列指派陳述式
name=uname=‘diege‘ 多目標賦值運算
diege += 43 增強賦值運算(相當於diege=diege+43)
2、運算式語句介紹
在Python中可以使用運算式作為語句 (本身只佔一行)。但是,因為運算式結果不會被儲存,只有當運算式工作並作為附加的效果,這樣才有意義。
通常在兩種情況下運算式用作語句。
*調用函數和方法
有些函數和方法會做很多工作,而不會傳回值,這種函數在其他語言中有時稱為流程。因為他們不會返回你可能想保留的值,所以你可以用運算式語句調用這些函數。
*在互動模式提示符下列印值
常見的python運算式語句
運算 解釋
spam(eggs,ham) 函數調用
spam.ham(eggs) 方法調用
spam 在互動模式解譯器內列印變數
spam < ham and ham != eggs 符合運算式
spam < ham < eggs 範圍運算式
注意:雖然運算式在python中可以作為語句出現,但語句不能作為運算式。
運算式語句和在原處修改
對列表調用append,sort,reverse這類在原處修改的元算,一定是對列表在原處的修改,但這些方法在列表修改後並不會把列表返回。
3、列印
>>>print ‘diege,test‘ #把對象列印至sys.stdout,在元素之間增加一個空格,以及在末尾增加分行符號。
>>> name=‘diege‘
>>> age=18
>>> print ‘my name is:%s age is:%s‘%(name,age)
my name is:diege age is:18
print x 等價於
import sys
sys.stdout.write(str(x)+‘\n‘
當print 語句以>>開始,後面再跟著輸出的檔案對象(或其他對象)時,該print語句可以將文字傳給該對象的write方法,但是不用重設sys.stdout。因為這種重新導向是暫時的。普通的print語句還是會繼續列印到原始的輸出資料流的。
>>> log=open(‘log.txt‘,‘a‘,0)
>>> x,y,z=10,11,12
>>> print >> log,x,y,z
>>> print >> 輸出的檔案,輸入,的,內容
三、流程語句
1、while迴圈
while <test>:
<statements1>
if <test2>:break
if <test3>:continue
if <test4>:pass
else:
<statements2>
break
跳出最近所在的迴圈(跳出整個迴圈語句)
continue
跳到最近所在迴圈的開頭處(來到迴圈的首行,跳過本次迴圈)
pass
什麼事也不做,只是空佔位語句
迴圈else塊
只有當迴圈正常離開時才會執行(也就是沒有碰到break語句)
2、for迴圈
for迴圈在Python中是一個通用的序列迭代器:可以遍曆任何有序的序列對象內的元素。for語句可用於字串,列表,元組,其他內建可迭代對象以及之後我們能夠通過類所建立的新對象。
for迴圈的首行定義了一個賦值目標(或【一些目標】),以及你想遍曆的對象,首行後面是你想重複的語句塊(一般都有縮排)
當ptyhon運行for迴圈時,會逐個將序列對象中的元素賦值給目標,然後為每個元素執行迴圈主體。
for <target> in <object>:
<statements>
if <test>:break
if <test>:conitnue
else:
<statements>
可以多層嵌套
三元運算式
A=Y if X else Z
只有當X為真時才會執行運算式Y,而只有當X為假時,才會執行運算式Z
3、迭代器
for迴圈可以用在任何【可迭代的對象】。這些迭代工具包括了for迴圈,列表解析,in成員關係測試,以及map內建函數等。
next()檔案迭代方法,無需將檔案讀取。
逐行讀取文本的最佳方式就是根本不要去讀取,其替代的方法就是,讓for迴圈在每輪自動調用next從而前進到下一行
>>> for line in open(‘/etc/rc.conf‘):
... print line.upper(),
字典迭代
>>> for key in D:
... print key,D[key]
其他迭代環境
列表解析
[line.upper() for line in open(‘/etc/rc.conf‘)]
in成員關係
map內建函數以及其他內建工具(如sorted,sum)
map(str.upper,open(‘/etc/rc.conf‘))
>>> sorted(open(‘/etc/rc.conf‘)) #這個工具排序了,較新的內建函數,採用了迭代協議。應用於任何可迭代的對象上。
>>> sum([3,5,6,9]) #sum調用會計算任何可迭代對象內所有數位和
23
list和tuple內建函數(從可迭代對象建立新的對象),字串join方法(在可迭代對象內字串之間放入子字串),以及序列指派陳述式等。
>>> list(open(‘/etc/rc.conf‘))
>>> tuple(open(‘/etc/rc.conf‘))
>>> ‘&&‘.join(open(‘/etc/rc.conf‘))
>>> a,d,c,d=open(‘/etc/rc.conf‘)
4、編寫迴圈的技巧
遍曆序列時,首選for迴圈,for迴圈包括多數計數器式的迴圈,for比while容易寫,執行時也比較快。
Python提供了兩個內建函數,在for迴圈內定製迭代:
* 內建range函數返回連續整數列表,可作為for中的索引。
>>> range(5,10,2)
[5, 7, 9]
>>> range(5,-5,-1)
[5, 4, 3, 2, 1, 0, -1, -2, -3, -4]
盡量使用簡單的for迴圈,不要用while,並且不要在for迴圈中使用range調用,只將其視為最後的選擇,更簡單的辦法總是更好。
>>> for i in X:
... print i
for x in S[::2]:print x# 步長2的
*內建 zip函數返回並行的元素元組的列表,可用於在for中遍曆數個序列
並行遍曆:zip 和map
>>> L1=[1,2,3,4]
>>> L2=[5,6,7,8]
>>> zip(L1,L2)
[(1, 5), (2, 6), (3, 7), (4, 8)]
>>> for (x,y) in zip(L1,L2):
... print x,y,‘--‘,x+y
當參數長度不同時,zip會以最短序列的長度為準來截斷所得到的元組:
內建map函數,用類似的方式把序列的元素配對起來,但是如果參數長度,不同則會為較短的序列用None補齊。
>>> map(None,S1,S2)
[(‘A‘, ‘x‘), (‘B‘, ‘y‘), (‘C‘, ‘z‘), (None, ‘1‘), (None, ‘2‘), (None, ‘3‘)]
使用zip構造字典
>>> keys=[‘name‘,‘age‘,‘class‘]
>>> vals=[‘diege‘,18,2012]
>>> dict(zip(keys,vals))
{‘age‘: 18, ‘name‘: ‘diege‘, ‘class‘: 2012}
>>> D5=dict(zip(keys,vals))
enumerate內建函數,同時產生位移和元素
>>> S=‘diege‘
>>> for (offset,item) in enumerate(S):
... print item,offset
...
d 0
i 1
這個方法有個next方法,每次遍曆列表時,會返回一個(index,value)的元組,而我們能在for中通過元組賦值運算將其分解。
>>> E=enumerate(S)
>>> E.next()
(0, ‘d‘)
>>> E.next()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration
5、列表解析
列表解析是寫在方括弧中的,因為它畢竟是一種建立新的列表的方式。
[【運算式】 for x in L【for迴圈行首】]
列表解析
>>> L=[1,2,3,4,5]
>>> L=[x+10 for x in L]
將列表中行的分行符號去掉
>>> lines=[line.rstrip() for line in lines]
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘)]
擴充列表解析
重複上一個例子,但我們只需開頭不為#的文字行。
>>> lines=[line.rstrip() for line in open(‘/etc/rc.conf‘) if line[0]!=‘#‘]
完整的語句可接納任意數目的for分句,而每個分區都可以結合一個可選的if分句
>>> [x+y for x in ‘abc‘ for y in ‘lmn‘]
[‘al‘, ‘am‘, ‘an‘, ‘bl‘, ‘bm‘, ‘bn‘, ‘cl‘, ‘cm‘, ‘cn‘]
對一個字串中的每個x,以及另一個字串中的每個y,建立x+y合并的列表。收集兩個字串字元的排列組合
Python學習筆記總結(一)對象和流程語句總結