-
一是先判断一下 key 是否存在,用 in 操作符:
if 'Paul' in d: print d['Paul']
如果 'Paul' 不存在,if语句判断为False,自然不会执行 print d['Paul'] ,从而避免了错误。
二是使用dict本身提供的一个 get 方法,在Key不存在的时候,返回None:
>>> print d.get('Bart') 59 >>> print d.get('Paul') None
查看全部 -
\n 为转义字符,表示换行 ,注意为左斜杠!
查看全部 -
第二次学习
查看全部 -
列表生成式的 for 循环后面还可以加上 if 判断
isinstance(x, str) 可以判断变量 x 是否是字符串;
字符串的 upper() 方法可以返回大写的字母。
查看全部 -
items()可以将dict的对象转换成了包含tuple的list,我们对这个list进行迭代,可以同时获得key和value:
>>> d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } >>> print d.items() [('Lisa', 85), ('Adam', 95), ('Bart', 59)]
和 values() 有一个 itervalues() 类似, items() 也有一个对应的 iteritems(),iteritems() 不把dict转换成list,而是在迭代过程中不断给出 tuple,所以, iteritems() 不占用额外的内存。
查看全部 -
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,这样,我们迭代的就是 dict的每一个 value:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 } print d.values() # [85, 95, 59]for v in d.values(): print v# 85# 95# 59
如果仔细阅读Python的文档,还可以发现,dict除了values()方法外,还有一个 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
那这两个方法有何不同之处呢?
1. values() 方法实际上把一个 dict 转换成了包含 value 的list。
2. 但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
3. 打印 itervalues() 发现它返回一个 <dictionary-valueiterator> 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
查看全部 -
迭代永远是取出元素本身,而非元素的索引。
想在 for 循环中拿到索引
方法是使用 enumerate() 函数:
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> for index, name in enumerate(L):... print index, '-', name ... 0 - Adam 1 - Lisa 2 - Bart 3 - Paul
zip()函数可以把两个 list 变成一个 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
如果第一个索引是0,还可以省略
只用一个 : ,表示从头到尾.
第3个参数:
L[::2]
表示每隔n个取一个,
查看全部 -
十六进制用
0x
前缀和0-9,a-f表示,例如:0xff00
,0xa5b4c3d2
,等等。查看全部 -
① ()定义单元素的tuple有歧义,单元素 tuple 要多加一个逗号“,”例如: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
查看全部 -
反斜杠可以用来转义,使用r可以让反斜杠不发生转义。。 如 r"this is a line with \n" 则\n会显示,并不是换行
我想,学了的人都知道 r'.....' 可以让里面的\不发生转义,但细说是这样的,加 ''r'' 的作用并不是让它不转义,而是在会改变原始内容的情况下,不发生转义,但没有改变原始内容的作用还是可以实现。
例如 print r'12,\'12\'' 去掉 ''\'' 后,代码就会执行失败。可以说明 ''\'' 是产生了作用的,但它并没有消失,而是以
12,\'12\'
原始内容全部输出。这就是为什么 ''\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改为5move(4,a,c,b) #(得到a='A', c='B', b='C') 函数根据move(n,a,b,c)来计算所以move(4,a,b,c)=move(4,'A','C','B')
move(3,a,c,b)#(a='A',b='B',c='C')函数根据move(n,a,b,c)来计算所以move(3,a,b,c)=move(3,'A','B','C')
move(2,a,c,b)#(得到a='A', c='B', b='C') 函数根据move(n,a,b,c)来计算所以move(2,a,b,c)=move(2,'A','C','B')
move(1,a,c,b)#(a='A',b='B',c='C')函数根据move(n,a,b,c)来计算所以move(1,a,b,c)=move(1,'A','B','C')
print a,'-->',c #得到第1个顺序为'A'-->'C'
print a,'-->',c #这是move(2,a,c,b)的第二步 得到第2个顺序为'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个顺序为'C'-->'B'
print a,'-->',c #得出第4个顺序为'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个顺序为'B'-->'A'
print a,'-->',c #得出第6个顺序为'B'-->'C'
move(1, b, a, c) #a='A',b='B',c='C'
print a,'-->',c #得出第7个顺序为'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 不适用于硬件、移动、游戏开发,代码运行慢,但是代码量小。
查看全部 -
不错 通俗易懂。。
查看全部
举报