1、对list切片
取一个list的部分元素是非常常见的操作。
例:
>>>L = ['Adam', 'Lisa', 'Bart', 'Paul'] #取前3个元素 >>>L[0:3]
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。即索引0,1,2,正好是3个元素。如果第一个索引是0,还可以省略:L[:3]
L[:]表示从头取到尾。L[::2]第三个参数表示每N个取一个,上面的 L[::2] 会每两个元素取出一个来,也就是隔一个取一个。
把list换成tuple操作完全相同只是返回tuple
任务:
range()函数可以创建一个数列:
>>> range(1, 101) [1, 2, 3, ..., 100]
请利用切片,取出:
1. 前10个数;
2. 3的倍数;
3. 不大于50的5的倍数
L = range(1, 101) print L[:10] print L[2::3] print L[4:50:5]
2、倒序切片
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul'] >>> L[-2:] ['Bart', 'Paul'] >>> L[:-2] ['Adam', 'Lisa'] >>> L[-3:-1] ['Lisa', 'Bart'] >>> L[-4:-1:2] ['Adam', 'Bart']
任务:
利用倒序切片对 1 - 100 的数列取出:
* 最后10个数;
* 最后10个5的倍数。
L = range(1, 101) print L[-10:] print L[4::5][-10:]
3、对字符串切片
>>> 'ABCDEFG'[:3] 'ABC' >>> 'ABCDEFG'[-3:] 'EFG' >>> 'ABCDEFG'[::2] 'ACEG'
任务:
字符串有个方法 upper() 可以把字符变成大写字母:
>>> 'abc'.upper() 'ABC'
但它会把所有字母都变成大写。请设计一个函数,它接受一个字符串,然后返回一个仅首字母变成大写的字符串。
提示:利用切片操作简化字符串操作。
def firstCharUpper(s): return s[0].upper()+s[1:] print firstCharUpper('hello') print firstCharUpper('sunday') print firstCharUpper('september')
4、迭代:
在Python中,如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们成为迭代(Iteration)。
因为 Python 的 for循环不仅可以用在list或tuple上,还可以作用在其他任何可迭代对象上。
因此,迭代操作就是对于一个集合,无论该集合是有序还是无序,我们用 for 循环总是可以依次取出集合的每一个元素。
注意: 集合是指包含一组元素的数据结构,我们已经介绍的包括: 1. 有序集合:list,tuple,str和unicode; 2. 无序集合:set 3. 无序集合并且具有 key-value 对:dict
而迭代是一个动词,它指的是一种操作,在Python中,就是 for 循环。
任务:请用for循环迭代数列 1-100 并打印出7的倍数。
s=range(1,101) for i in s: if i%7 == 0: print i
5、索引迭代:
>>> 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')]
在迭代 ['Adam', 'Lisa', 'Bart', 'Paul'] 时,如果我们想打印出名次 - 名字(名次从1开始),请考虑如何在迭代中打印出来。
提示:考虑使用zip()函数和range()函数。
L = ['Adam', 'Lisa', 'Bart', 'Paul'] n = range(1,5) s = zip(n,L) for index, name in s: print index, '-', name
6、迭代dict字典中的value
dict 对象有一个 values() 方法,这个方法把dict转换成一个包含所有value的list,dict除了values()方法外,还有一个 itervalues() 方法,用 itervalues() 方法替代 values() 方法。
任务:
给定一个dict:
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 }
请计算所有同学的平均分。
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59, 'Paul': 74 } i = d.values() sum = 0.0 for x in i: sum = sum + x print sum/len(i)
7、迭代dict的key和value
items() 函数和iteritems()函数
任务:
请根据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 k, v in d.iteritems(): sum = sum + v print k, ':', v print 'average', ':', sum / len(d)
8、生成列表:
#请利用列表生成式生成列表 [1x2, 3x4, 5x6, 7x8, ..., 99x100] #提示:range(1, 100, 2) 可以生成list [1, 3, 5, 7, 9,...] print [x*(x+1) for x in range(1,100,2)]