Python中整數(shù)和浮點(diǎn)數(shù)
Python支持對整數(shù)和浮點(diǎn)數(shù)直接進(jìn)行四則混合運(yùn)算,運(yùn)算規(guī)則和數(shù)學(xué)上的四則運(yùn)算規(guī)則完全一致商玫。
使用括號可以提升優(yōu)先級,這和數(shù)學(xué)運(yùn)算完全一致衙传,注意只能使用小括號决帖,但是括號可以嵌套很多層厕九。
和數(shù)學(xué)運(yùn)算不同的地方是蓖捶,Python的證書運(yùn)算結(jié)果任然是正式,浮點(diǎn)數(shù)運(yùn)算結(jié)果仍然是浮點(diǎn)數(shù):
1 + 2 = 3 # ==> 整數(shù) 3
1.0 + 2.0 - 3.0 # ==> 浮點(diǎn)數(shù)數(shù) 3.0
但是整數(shù)和浮點(diǎn)數(shù)混合勻速三的結(jié)果就變成浮點(diǎn)數(shù)了: 1 + 2.0 = 3.0
Python的整數(shù)除法扁远,即使除不盡俊鱼,結(jié)果仍然是整數(shù),余數(shù)直接被扔掉畅买。不過并闲,Python提供了一個秋雨的運(yùn)算%可以計算余數(shù): 11 % 4 # ==> 3
如果我們要計算11 / 4 的精確結(jié)果,按照“整數(shù)和浮點(diǎn)數(shù)混合運(yùn)算的結(jié)果是浮點(diǎn)數(shù)”的法則谷羞,把兩個數(shù)中的一個變成浮點(diǎn)數(shù)在運(yùn)算就沒問題了:11.0 / 4 # ==> 2.75
Python 中布爾類型
布爾類型只有True和False兩種值帝火,但是布爾類型有以下幾種運(yùn)算:
與運(yùn)算:只有兩個布爾值都為True時溜徙,計算結(jié)果才為True。
或運(yùn)算:只要有一個布爾值為True犀填,計算結(jié)果就是True.
非運(yùn)算:把True變?yōu)镕alse蠢壹,或把False變?yōu)門rue。(布爾運(yùn)算在計算機(jī)中用來做條件判斷九巡,根據(jù)計算結(jié)果為True或False图贸,計算機(jī)可以自動執(zhí)行不同的后續(xù)代碼)
Python把 0 、空字符串 ‘’冕广、和None看成是False疏日,其他數(shù)值和非空字符串都看成是True。
短路計算:
1撒汉、在計算 a and b 時沟优,如果 a 是False,則根據(jù)與運(yùn)算法則神凑,整個結(jié)果必定為 Flase净神,因此返回a;如果 a 是True溉委,則整個計算結(jié)果必定取決于b鹃唯,因此返回b
2、在計算 a or b 時瓣喊,如果 a 是True坡慌,則根據(jù)或運(yùn)算法則,整個計算結(jié)果必定為True藻三,因此返回a洪橘;如果a是False,則整個計算結(jié)果必定取決于b棵帽,因此返回b熄求。
所以,Python解釋器在做布爾運(yùn)算時逗概,只要能提前確定計算結(jié)果弟晚,它就不會往后算了,直接返回結(jié)果逾苫。
Python創(chuàng)建list
Python內(nèi)置的一種數(shù)據(jù)類型是列表:list卿城。list 是一種有序的集合,可以隨時添加和刪除其中的元素铅搓。
list是數(shù)學(xué)意義上的有序集合瑟押,也就是說,list中的元素是按照順序排列的星掰。
構(gòu)造list非常簡單多望,直接用[ ] 把list的所有元素都括起來嫩舟,就是一個list對象。通常怀偷,我們會把list賦值給一個變量至壤,這樣,就可以通過變量來引用list:classmates = [‘Michael’, ‘Bob’, ’Tracy’]
classmates # 打印classmates變量的內(nèi)容
[‘Michael’, ‘Bob’, ’Tracy’] # 輸出的結(jié)果
由于Python是動態(tài)語言枢纠,所以list中包含的元素并不要求都必須是同一種數(shù)據(jù)類型像街,我們完全可以在list中包含各種數(shù)據(jù):
L = [‘Michael’, 100, True]
一個元素也沒有的list,就是空list晋渺。
Python按照索引訪問list
由于list是一個有序集合镰绎,所以,我們可以用一個list按分?jǐn)?shù)從高到底表示出辦理的3個同學(xué):
L = ['Adam', 'Lisa', 'Bart’]
若想拿到第 i 個同學(xué)的名字就需要這樣寫:L[i]
Python之倒序訪問list
在一個list中我們?nèi)粝氲玫阶詈笠幻瑢W(xué)的名字木西,可以用-1這個索引來表示最后一個元素畴栖。相應(yīng)的,其他的一次類推八千。
Python之添加新元素
將一個新的元素添加到現(xiàn)有的list當(dāng)中去
第一個方法吗讶,就是用list的 append() 方法,把新的元素追加到list的末尾恋捆;(append() 方法照皆,總是把新的元素添加到list的尾部)
第二個方法,是 insert() 方法沸停,它接受兩個參數(shù)膜毁,第一個參數(shù)是索引號,第二個參數(shù)是待添加的新元素愤钾;L = ['Adam', 'Lisa', 'Bart']
L.insert(0, 'Paul')
print L
['Paul', 'Adam', 'Lisa', 'Bart']
Python從list刪除元素
如果我們想要刪除list中的最后一個元素瘟滨,我們可以使用pop() 方法刪除:
L = ['Adam', 'Lisa', 'Bart', 'Paul']
L.pop()
'Paul'
print L
['Adam', 'Lisa', 'Bart']
pop() 方法總是刪掉list的最后一個元素,并且它還返回這個元素能颁,所以我們執(zhí)行pop() 方法后杂瘸,會打印出最后一個元素。
pop(i) 表示把list中 索引為 i 的元素刪除伙菊。
Python中替換元素
對list中的某一個索引賦值败玉,就可以直接用新的元素替換掉原來的元素,list包含的元素個數(shù)保持不變占业。
Python之創(chuàng)建tuple
tuple 是另一種有序的列表绒怨,中文翻譯為“元組”纯赎。tuple和list非常類似谦疾。但是,tuple一旦創(chuàng)建完畢犬金,就不能修改了念恍。
創(chuàng)建tuple和創(chuàng)建list唯一不同之處是用 () 替代了 []
tuple 沒有 append() 方法六剥,也沒有 insert() 方法。
獲取tuple元素的方式和list是一模一樣的峰伙,可以使用索引訪問元素疗疟,但是不能賦值成別的元素。
Python之創(chuàng)建單元素tuple
tuple和list一樣瞳氓,可以包含 0 個策彤、1 個和任意多個元素。
包含 0 個元素的tuple匣摘,也就是空tuple店诗,直接用 () 表示。
() 既可以表示tuple音榜,又可以作為括號表示運(yùn)算時的優(yōu)先級庞瘸,結(jié)果(1)被Python解釋器計算出結(jié)果 1 ,導(dǎo)致我們得到的不是tuple赠叼,而是整數(shù) 1 擦囊。
正式因?yàn)橛?) 定義單元素的tuple有歧義,所以Python規(guī)定嘴办,單元素tuple要多加一個逗號“,”瞬场,這樣就避免了歧義:t = (1,)
print t
(1,)
Python在打印單元素tuple時,也自動添加了一個“,”涧郊,為了更明確的告訴你這個一個tuple.
Python之“可變”的tuple
t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 個元素:'a'泌类,'b'和一個list:['A', 'B']。list作為一個整體是tuple的第3個元素底燎。list對象可以通過 t[2] 拿到:
L = t[2]
然后刃榨,我們把list的兩個元素改一改:
L[0] = 'X'
L[1] = 'Y'
再看看tuple的內(nèi)容:
print t
('a', 'b', ['X', 'Y'])
不是說tuple一旦定義后就不可變了嗎?怎么現(xiàn)在又變了双仍?
別急枢希,我們先看看定義的時候tuple包含的3個元素:
當(dāng)我們把list的元素'A'和'B'修改為'X'和'Y'后,tuple變?yōu)椋?/p>
表面上看朱沃,tuple的元素確實(shí)變了苞轿,但其實(shí)變的不是 tuple 的元素,而是list的元素逗物。
tuple一開始指向的list并沒有改成別的list搬卒,所以,tuple所謂的“不變”是說翎卓,tuple的每個元素契邀,指向永遠(yuǎn)不變。即指向'a'失暴,就不能改成指向'b'坯门,指向一個list微饥,就不能改成指向其他對象,但指向的這個list本身是可變的古戴!
理解了“指向不變”后欠橘,要創(chuàng)建一個內(nèi)容也不變的tuple怎么做?那就必須保證tuple的每一個元素本身也不能變现恼。
Python之if語句
age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END'
注意: Python代碼的縮進(jìn)規(guī)則肃续。具有相同縮進(jìn)的代碼被視為代碼塊,上面的3叉袍,4行 print 語句就構(gòu)成一個代碼塊(但不包括第5行的print)痹升。如果 if 語句判斷為 True,就會執(zhí)行這個代碼塊畦韭。
縮進(jìn)請嚴(yán)格按照Python的習(xí)慣寫法:4個空格疼蛾、不要使用tab、更不要混合tab和空格艺配,否則很容易造成索引引起的語法錯誤察郁。
注意:
If語句后接表達(dá)式,然后用 : 表示代碼塊開始转唉。
如果你在Python交互環(huán)境下敲代碼皮钠,還要特別留意縮進(jìn),并且推出縮進(jìn)需要多敲一行回車:age = 20
if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20print t
(1,)
Python在打印單元素tuple時赠法,也自動添加了一個“,”麦轰,為了更明確的告訴你這個一個tuple.
#Python之“可變”的tuple
>>> t = ('a', 'b', ['A', 'B'])
注意到 t 有 3 個元素:'a','b'和一個list:['A', 'B']砖织。list作為一個整體是tuple的第3個元素款侵。list對象可以通過 t[2] 拿到:
>>> L = t[2]
然后,我們把list的兩個元素改一改:
>>> L[0] = 'X'
>>> L[1] = 'Y'
再看看tuple的內(nèi)容:
>>> print t
('a', 'b', ['X', 'Y'])
不是說tuple一旦定義后就不可變了嗎侧纯?怎么現(xiàn)在又變了新锈?
別急,我們先看看定義的時候tuple包含的3個元素:
當(dāng)我們把list的元素'A'和'B'修改為'X'和'Y'后眶熬,tuple變?yōu)椋?/p>
表面上看妹笆,tuple的元素確實(shí)變了,但其實(shí)變的不是 tuple 的元素娜氏,而是list的元素拳缠。
tuple一開始指向的list并沒有改成別的list,所以贸弥,tuple所謂的“不變”是說窟坐,tuple的每個元素,指向永遠(yuǎn)不變。即指向'a'狸涌,就不能改成指向'b',指向一個list最岗,就不能改成指向其他對象帕胆,但指向的這個list本身是可變的!
理解了“指向不變”后般渡,要創(chuàng)建一個內(nèi)容也不變的tuple怎么做懒豹?那就必須保證tuple的每一個元素本身也不能變。
#Python之if語句
>age = 20
if age >= 18:
print 'your age is', age
print 'adult'
print 'END'
注意: Python代碼的縮進(jìn)規(guī)則驯用。具有相同縮進(jìn)的代碼被視為代碼塊脸秽,上面的3,4行 print 語句就構(gòu)成一個代碼塊(但不包括第5行的print)蝴乔。如果 if 語句判斷為 True记餐,就會執(zhí)行這個代碼塊。
縮進(jìn)請嚴(yán)格按照Python的習(xí)慣寫法:4個空格薇正、不要使用tab片酝、更不要混合tab和空格,否則很容易造成索引引起的語法錯誤挖腰。
注意:
If語句后接表達(dá)式雕沿,然后用 : 表示代碼塊開始。
如果你在Python交互環(huán)境下敲代碼猴仑,還要特別留意縮進(jìn)审轮,并且推出縮進(jìn)需要多敲一行回車:
>>> age = 20
>>> if age >= 18:
... print 'your age is', age
... print 'adult'
...
your age is 20
adult
Python之 if-else
當(dāng)if語句判斷表達(dá)式的結(jié)果為True時,就會執(zhí)行if 包含的代碼塊辽俗。
if ... else …
if age >= 18:
print 'adult'
else:
print ‘teenager'
利用if … else ...語句疾渣,我么可以根據(jù)條件表達(dá)式的值為True或False,分別執(zhí)行if代碼或或者else代碼塊崖飘。
Python之 if-elif-else
elif 意思就是else if稳衬。
特別注意:
這一系列條件判斷會從上到下依次判斷,如果某個判斷為True坐漏,執(zhí)行完對應(yīng)的代碼塊薄疚,后面的條件判斷就直接忽略,不再執(zhí)行了赊琳。
Python之 for循環(huán)
Python 的for循環(huán)可以依次把list或tuple的每個元素迭代出來:
L = ['Adam', 'Lisa', 'Bart']
for name in L:
print name
注意:name 這個變量是在for循環(huán)中定義的街夭,意思是,依次取出list中的每一個元素躏筏,并把元素賦值給name板丽,然后執(zhí)行for循環(huán)體(就是縮進(jìn)的代碼塊)。
Python之 while循環(huán)
和for循環(huán)不同的另一種循環(huán)是while循環(huán),while循環(huán)不會迭代list或tuple的元素埃碱,而是根據(jù)表達(dá)式判斷循環(huán)是否結(jié)束猖辫。
N = 10
x = 0
while x < N:
print x
x = x + 1
while 循環(huán)每次先判斷 x < N ,如果為True砚殿,則執(zhí)行循環(huán)體的代碼塊啃憎,否則,退出循環(huán)似炎。
在循環(huán)體內(nèi)辛萍,x = x + 1 會讓x 不斷增加,最終應(yīng)為x < N不成立而退出循環(huán)羡藐。
如果沒有這一個語句贩毕,while 循環(huán)在判斷x < N時總是為True,就會無限循環(huán)下去仆嗦,變成死循環(huán)辉阶,所以要特別留意while循環(huán)的退出條件。
Python之 break退出循環(huán)
用for循環(huán)或者while循環(huán)時瘩扼,如果要在循環(huán)體內(nèi)直接退出循環(huán)睛藻,可以使用break語句:
sum = 0
x = 1
while True:
sum = sum + x
x = x + 1
if x > 100:
break
print sum
Python之 continue繼續(xù)循環(huán)
在循環(huán)過程中,可以用break退出當(dāng)前循環(huán)邢隧,還可以用continue跳過后續(xù)循環(huán)代碼店印,繼續(xù)下一次循環(huán)。
假設(shè)我們已經(jīng)寫好了利用for循環(huán)計算平均分的代碼:
L = [75, 98, 59, 81, 66, 43, 69, 85]
sum = 0.0
n = 0
for x in L:
sum = sum + x
n = n + 1
print sum / n
現(xiàn)在老師只想統(tǒng)計及格分?jǐn)?shù)的平均分倒慧,就要把 x < 60 的分?jǐn)?shù)剔除掉按摘,這時,利用 continue纫谅,可以做到當(dāng) x < 60的時候炫贤,不繼續(xù)執(zhí)行循環(huán)體的后續(xù)代碼,直接進(jìn)入下一次循環(huán):
for x in L:
if x < 60:
continue
sum = sum + x
n = n + 1
Python之 多重循環(huán)
在循環(huán)內(nèi)部付秕,還可以嵌套循環(huán)兰珍,我們來看一個例子:
for x in ['A', 'B', 'C']:
for y in ['1', '2', '3']:
print x + y
x 每循環(huán)一次,y 就會循環(huán) 3 次询吴,這樣掠河,我們可以打印出一個全排列:
A1
A2
A3
B1
B2
B3
C1
C2
C3
Python之什么是dict
用 dict 表示“名字”-“成績”的查找表如下:
d = {
'Adam': 95,
'Lisa': 85,
'Bart': 59
}
我們把名字稱為key,對應(yīng)的成績稱為value猛计,dict就是通過 key 來查找 value唠摹。
花括號{}表示這是一個dict,然后按照key : value奉瘤,寫出來即可勾拉。最后一個key : value的逗號可以省略。
由于dict也是集合,len()函數(shù)可以計算任意集合的大信涸蕖:
len(d)
3
Python之訪問dict
dict中成肘,可以簡單的使用d[key]的形式來查找對應(yīng)的value,這個和list很像斧蜕,不同之處是双霍,list必須使用索引返回對應(yīng)的元素,而dict使用key
注意:通過key訪問dict的value惩激,只要key存在店煞,dict就返回對應(yīng)的value蟹演。如果key不存在风钻,會直接報錯:keyError
要避免keyError發(fā)生,有兩個方法:
一酒请、先判斷一下key是否存在骡技,用in操作符:
if 'Paul' in d:
print d['Paul']
二、使用dict本身提供的一個get方法羞反,在key不存在的時候布朦,返回None:print d.get('Bart')
59
print d.get('Paul')
None
Python中dict的特點(diǎn)
1、查找速度快昼窗。無論dict有10個元素還是10萬個元素是趴,查找速度都一樣。而list的查找速度隨著元素增加而逐漸下降澄惊。
Dict相對應(yīng)的缺點(diǎn)是 占用內(nèi)存大唆途,還會浪費(fèi)很多內(nèi)容。list正好相反掸驱,占用內(nèi)存小肛搬,但是查找速度慢。
由于dict是按key查找毕贼,所以温赔,在一個dict鐘,key不能重復(fù)鬼癣。
2陶贼、存儲的key-value序?qū)κ菦]有順序的。
3待秃、作為key的元素必須不可變骇窍。Python的基本類型如字符串、整數(shù)锥余、浮點(diǎn)數(shù)都是不可變的腹纳。都可以作為key。
不可變的這個限制金作用于key,value是否可變無所謂嘲恍。
Python更新dict
要把新同學(xué)'Paul'的成績 72 加進(jìn)去足画,用賦值語句:d['Paul'] = 72
Python之 遍歷dict
由于dict也是一個集合,所以佃牛,遍歷dict和遍歷list類似淹辞,都可以通過 for 循環(huán)實(shí)現(xiàn)。
直接使用for循環(huán)可以遍歷 dict 的 key:d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
for key in d:
... print key
...
Lisa
Adam
Bart
由于通過 key 可以獲取對應(yīng)的 value俘侠,因此象缀,在循環(huán)體內(nèi),可以獲取到value的值爷速。