切片
在学习日记三中我们学习了list的相关操作,其中就有对list的切片操作。
在这里我们将学习到一个新的方法。
操作如下图所示
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
L[0:3]
[‘Adam’, ‘Lisa’, ‘Bart’]
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。
第一个索引为0时,可以省略。L[ : ]
[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
:表示从头到尾,因此L[ : ]实际上是复制了一个新list。L[::2]
[‘Adam’, ‘Bart’]
第三个参数表示每n个取一个,上面的L[ ::2]会每两个元素取一个来,也就是隔一个取一个。
这里的切片操作同样适用与tuple,只是切片结果变成tuple。
对于list,既然Python支持L[-1]取倒数第一个元素,那么它同样支持倒数切片,例如:
L = [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
L[-2:]
[‘Bart’, ‘Paul’]
L[:-2]
[‘Adam’, ‘Lisa’]
L[-3:-1]
[‘Lisa’, ‘Bart’]
L[-4👎2]
[‘Adam’, ‘Bart’]
记住倒数第一个元素的索引是-1。倒序切片包含起始索引,不包含结束索引。
对字符串切片
‘ABCDEFG’[:3]
‘ABC’‘ABCDEFG’[-3:]
‘EFG’‘ABCDEFG’[::2]
‘ACEG’
例题:设计一个函数把所有字符的首字母变成大写。
def Upper(s):
return s[0].upper()+s[1:]
print (Upper('hello'))
print (Upper('best'))
#输出
Hello
Best
迭代
迭代在python中就是for循环
例如请用for循环迭代数列1-100并打印出7的倍数
for i in range(1,101):
if i%7==0:
print (i)
利用enumerate()函数完成python的索引迭代。使用 enumerate() 函数,我们可以在for循环中同时绑定索引index和元素name。但是,这不是 enumerate() 的特殊语法。实际上,enumerate() 函数把:
[‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’]
变成了类似:
[(0, ‘Adam’), (1, ‘Lisa’), (2, ‘Bart’), (3, ‘Paul’)]
因此,迭代的每一个元素实际上是一个tuple:
for t in enumerate(L):
index = t[0]
name = t[1]
print index, ‘-’, name
例如:
在迭代 [‘Adam’, ‘Lisa’, ‘Bart’, ‘Paul’] 时,如果我们想打印出名次 - 名字(名次从1开始),请考虑如何在迭代中打印出来。
L=zip([1,2,3,4],['Adam','Lisa','Bart','Paul'])
for index,name in L:
print (index,'-',name)
迭代dict的value
dict{key:value},用 for 循环直接迭代 dict,可以每次拿到dict的一个key。
dict对象values()可以把dict转换成一个包含所有value的list,这样我们就可以迭代dict的每一个value。
例如:给定一个dict:
d={‘Adam’:95,‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }请计算同学们的平均分。
d={'Adam':95,'Lisa': 85, 'Bart': 59, 'Paul': 74 }
sum=0.0
for i in d.values():
sum=sum+i
print (sum/len(d))#print (sum/4)
除了values()的方法还有itervalues()效果跟values()一样。
那这两个方法有何不同之处呢?
那两者有什么不同呢
-
values() 方法实际上把一个 dict 转换成了包含 value 的list。
-
但是 itervalues() 方法不会转换,它会在迭代过程中依次从 dict 中取出 value,所以 itervalues() 方法比 values() 方法节省了生成 list 所需的内存。
-
打印 itervalues() 发现它返回一个 对象,这说明在Python中,for 循环可作用的迭代对象远不止 list,tuple,str,unicode,dict等,任何可迭代对象都可以作用于for循环,而内部如何迭代我们通常并不用关心。
如果一个对象说自己可迭代,那我们就直接用 for 循环去迭代它,可见,迭代是一种抽象的数据操作,它不对迭代对象内部的数据有任何要求。
迭代的key和value
上述我们讲了values()函数迭代dict中的所有value,那么如何同时迭代dict的key和value呢。
此时items()可以同时迭代key和value。
例如:
请根据dict:
d = { ‘Adam’: 95, ‘Lisa’: 85, ‘Bart’: 59, ‘Paul’: 74 }
打印出 name : score,最后再打印出平均分 average : score。
d={'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74}
sum=0.0
for key,value in d.items(d):
sum=sum+value
print (key,':',value)
print ('average',':',sum/len(d))