-
一是先判斷一下 key 是否存在,用 in 操作符:
if?'Paul'?in?d: ????print?d['Paul']
如果 'Paul' 不存在,if語句判斷為False,自然不會(huì)執(zhí)行 print d['Paul'] ,從而避免了錯(cuò)誤。
二是使用dict本身提供的一個(gè) get 方法,在Key不存在的時(shí)候,返回None:
>>>?print?d.get('Bart') 59 >>>?print?d.get('Paul') None
查看全部 -
\n 為轉(zhuǎn)義字符,表示換行 ,注意為左斜杠!
查看全部 -
第二次學(xué)習(xí)
查看全部 -
列表生成式的?for 循環(huán)后面還可以加上 if 判斷
isinstance(x, str) 可以判斷變量 x 是否是字符串;
字符串的 upper() 方法可以返回大寫的字母。
查看全部 -
items()可以將dict的對(duì)象轉(zhuǎn)換成了包含tuple的list,我們對(duì)這個(gè)list進(jìn)行迭代,可以同時(shí)獲得key和value:
>>>?d?=?{?'Adam':?95,?'Lisa':?85,?'Bart':?59?} >>>?print?d.items() [('Lisa',?85),?('Adam',?95),?('Bart',?59)]
和 values() 有一個(gè) itervalues() 類似,?items()?也有一個(gè)對(duì)應(yīng)的?iteritems(),iteritems() 不把dict轉(zhuǎn)換成list,而是在迭代過程中不斷給出 tuple,所以, iteritems() 不占用額外的內(nèi)存。
查看全部 -
dict 對(duì)象有一個(gè)?values() 方法,這個(gè)方法把dict轉(zhuǎn)換成一個(gè)包含所有value的list,這樣,我們迭代的就是 dict的每一個(gè) value:
d?=?{?'Adam':?95,?'Lisa':?85,?'Bart':?59?} print?d.values() #?[85,?95,?59]for?v?in?d.values():????print?v#?85#?95#?59
如果仔細(xì)閱讀Python的文檔,還可以發(fā)現(xiàn),dict除了values()方法外,還有一個(gè)?itervalues()?方法,用?itervalues()?方法替代?values()?方法,迭代效果完全一樣:
d?=?{?'Adam':?95,?'Lisa':?85,?'Bart':?59?} print?d.itervalues() #?<dictionary-valueiterator?object?at?0x106adbb50>for?v?in?d.itervalues(): ????print?v #?85 #?95 #?59
那這兩個(gè)方法有何不同之處呢?
1.?values()?方法實(shí)際上把一個(gè) dict 轉(zhuǎn)換成了包含 value 的list。
2. 但是?itervalues()?方法不會(huì)轉(zhuǎn)換,它會(huì)在迭代過程中依次從 dict 中取出 value,所以 itervalues() 方法比 values() 方法節(jié)省了生成 list 所需的內(nèi)存。
3.?打印 itervalues() 發(fā)現(xiàn)它返回一個(gè) <dictionary-valueiterator> 對(duì)象,這說明在Python中,for 循環(huán)可作用的迭代對(duì)象遠(yuǎn)不止 list,tuple,str,unicode,dict等,任何可迭代對(duì)象都可以作用于for循環(huán),而內(nèi)部如何迭代我們通常并不用關(guān)心。
如果一個(gè)對(duì)象說自己可迭代,那我們就直接用 for 循環(huán)去迭代它,可見,迭代是一種抽象的數(shù)據(jù)操作,它不對(duì)迭代對(duì)象內(nèi)部的數(shù)據(jù)有任何要求。
查看全部 -
迭代永遠(yuǎn)是取出元素本身,而非元素的索引。
想在 for 循環(huán)中拿到索引
方法是使用?enumerate() 函數(shù):
>>>?L?=?['Adam',?'Lisa',?'Bart',?'Paul'] >>>?for?index,?name?in?enumerate(L):...?????print?index,?'-',?name ...? 0?-?Adam 1?-?Lisa 2?-?Bart 3?-?Paul
zip()函數(shù)可以把兩個(gè) list 變成一個(gè) list:
>>>?zip([10,?20,?30],?['A',?'B',?'C']) [(10,?'A'),?(20,?'B'),?(30,?'C')]
查看全部 -
切片(Slice)操作符----‘:’寫法
>>>?L[0:3] ['Adam',?'Lisa',?'Bart']
L[0:3]表示,從索引0開始取,直到索引3為止,但不包括索引3
如果第一個(gè)索引是0,還可以省略
只用一個(gè)?:?,表示從頭到尾.
第3個(gè)參數(shù):
L[::2]
表示每隔n個(gè)取一個(gè),
查看全部 -
十六進(jìn)制用
0x
前綴和0-9,a-f表示,例如:0xff00
,0xa5b4c3d2
,等等。查看全部 -
①?()定義單元素的tuple有歧義,單元素 tuple 要多加一個(gè)逗號(hào)“,”例如:t=(1,)
查看全部 -
L = ['Adam', 'Lisa', 'Bart']
L[-1]='Adam'
L[0]='Bart'
print L
#2
L = ['Adam', 'Lisa', 'Bart']
L[-1] ,L[0]=L[0],L[-1]
print L
#3
L = ['Adam', 'Lisa', 'Bart']
L.reverse()
print L
#4
L = ['Adam', 'Lisa', 'Bart']
L[::-1]
print L
查看全部 -
反斜杠可以用來轉(zhuǎn)義,使用r可以讓反斜杠不發(fā)生轉(zhuǎn)義。。 如 r"this is a line with \n" 則\n會(huì)顯示,并不是換行
我想,學(xué)了的人都知道 r'.....' 可以讓里面的\不發(fā)生轉(zhuǎn)義,但細(xì)說是這樣的,加 ''r'' 的作用并不是讓它不轉(zhuǎn)義,而是在會(huì)改變原始內(nèi)容的情況下,不發(fā)生轉(zhuǎn)義,但沒有改變原始內(nèi)容的作用還是可以實(shí)現(xiàn)。
例如?print r'12,\'12\'' 去掉 ''\'' 后,代碼就會(huì)執(zhí)行失敗。可以說明 ''\'' 是產(chǎn)生了作用的,但它并沒有消失,而是以?
12,\'12\'
原始內(nèi)容全部輸出。這就是為什么 ''\n''沒有任何作用的原因。
查看全部 -
def?move(n,a,b,c):
????if?n?==1:
????????print?a,?'-->',?c
????????return
????move(n-1,?a,?c,?b)?
????print?a,?'-->',?c
????move(n-1,?b,?a,?c)
move(5,?'A',?'B',?'C') #n改為5????move(4,a,c,b)?#(得到a='A',?c='B',?b='C')?函數(shù)根據(jù)move(n,a,b,c)來計(jì)算所以move(4,a,b,c)=move(4,'A','C','B')
????????move(3,a,c,b)#(a='A',b='B',c='C')函數(shù)根據(jù)move(n,a,b,c)來計(jì)算所以move(3,a,b,c)=move(3,'A','B','C')
????????????move(2,a,c,b)#(得到a='A',?c='B',?b='C')?函數(shù)根據(jù)move(n,a,b,c)來計(jì)算所以move(2,a,b,c)=move(2,'A','C','B')
????????????????move(1,a,c,b)#(a='A',b='B',c='C')函數(shù)根據(jù)move(n,a,b,c)來計(jì)算所以move(1,a,b,c)=move(1,'A','B','C')
????????????????????print?a,'-->',c??#得到第1個(gè)順序?yàn)?A'-->'C'
????????????????print?a,'-->',c?#這是move(2,a,c,b)的第二步?得到第2個(gè)順序?yàn)?A'-->'B'
????????????????move(1,?b,?a,?c)?#由move(2,'A','C','B')推出move(1,b,a,c)的值為move(1,'A','C','B'),
????????????????????print?a,'-->',c?#得出第3個(gè)順序?yàn)?C'-->'B'
????????????print?a,'-->',c?#得出第4個(gè)順序?yàn)?A'-->'C'
????????????move(2,?b,?a,?c)?#b='A',a='B',c='C',move(2,a,b,c)?==?move(2,'B','A','C')
????????????????move(1,a,c,b)?#?a='B',b='C',c='A'
????????????????????print?a,'-->',c?#得出第5個(gè)順序?yàn)?B'-->'A'
????????????????print?a,'-->',c?#得出第6個(gè)順序?yàn)?B'-->'C'
????????????????move(1,?b,?a,?c)?#a='A',b='B',c='C'
????????????????????print?a,'-->',c?#得出第7個(gè)順序?yàn)?A'-->'C'
????????#.
????????#.
????????#.
????????#.
????????#.
????#以此類推
????????????????
????print?a,?'-->',?c
????move(4,b,a,c)
????????move(3,a,c,b)
????????????move(2,a,c,b)
????????????????move(1,a,c,b)
????????print?a,?'-->',?c
查看全部 -
Pyhton 不適用于硬件、移動(dòng)、游戲開發(fā),代碼運(yùn)行慢,但是代碼量小。
查看全部 -
不錯(cuò) 通俗易懂。。
查看全部
舉報(bào)