一.切片
1,取一个列表的前三个元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack'] print(L[0:3])
L[0:3]表示,从索引0开始取,直到索引3为止,但不包括索引3。
如果第一个是索引0,还可以省略。L[:3]
2.倒数切片
倒数第一个元素的索引是-1
3.例子
L = list(range(100)) print("前十个数",L[:10]) print("后十个数",L[-10:]) print("前11到20个数",L[10:20]) print("前十个数,每两个取一个",L[:10:2]) print("所有数,每5个取一个",L[::5])
4.tuple也是一种list,唯一区别的是tuple不可变。因此,tuple也可以用切片操作,只是操作的结果仍是tuple:
5.字符串也可以看成一种list,每个元素就是一个字符。因此,字符串也可以用切片操作,只是操作结果仍是字符串:
6.练习,利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()
方法:
第一种方法:
def trim(s): if s =='': return s else: while s!='' and s[0]==' ': s=s[1:] while s!='' and s[-1]==' ': s=s[:-1] return s print(trim(" sss "))
第二种方法:使用递归
def trim(s): if s == '': return s elif s[0] == ' ': return trim(s[1:]) elif s[-1] == ' ': return trim(s[:-1]) else: return s print(trim(" sss "))
二、迭代
1、如果给定一个list或tuple,我们可以通过for
循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
可以看出,Python的for
循环抽象程度要高于C的for
循环,因为Python的for
循环不仅可以用在list或tuple上,还可以作用在其他可迭代对象上。
2、list这种数据类型虽然有下标,但很多其他数据类型是没有下标的,但是,只要是可迭代对象,无论有无下标,都可以迭代,比如dict就可以迭代:
因为dict的存储不是按照list的方式顺序排列,所以,迭代出的结果顺序很可能不一样。
默认情况下,dict迭代的是key。如果要迭代value,可以用for value in d.values()
,如果要同时迭代key和value,可以用for k, v in d.items()
。
3.由于字符串也是可迭代对象,因此,也可以作用于for
循环:
4、判断一个对象是都是可迭代对象,方法是通过collections模块的Iterable类型判断:
5、Python内置的enumerate
函数可以把一个list变成索引-元素对,这样就可以在for
循环中同时迭代索引和元素本身:
6、上面的for
循环里,同时引用了两个变量,在Python里是很常见的,比如下面的代码:
7.使用迭代查找一个list中最小和最大值,并返回一个tuple
def findMinAndMax(L): max=L[0] min=L[0] for i in L: if i>max : max=i elif i<min: min=i return max, min L=[1,2,3,5,8,9,0] print(findMinAndMax(L))
三、列表生成器
1、列表生成器,要生成的元素放到前面,后面跟上for循环,就可以把list创建出来
要生成[1x1, 2x2, 3x3, ..., 10x10]
2、for循环后面还而已加上if判断,这样可以筛选出仅偶数的平方
还可以使用两层循环
3、for
循环其实可以同时使用两个甚至多个变量,比如dict
的items()
可以同时迭代key和value。因此,列表生成式也可以使用两个变量来生成list:
4、把一个list中所有的字符串变成小写
四、生成器
练习
def triangles(): l = [1] while True: yield l l = [0]+l+[0] #首尾加0,用于边界的计算 l = [l[i]+l[i+1] for i in range(len(l)-1)] #l[i]+l[i+1] 前一个值和后一个值相加计算出下一个值 #for i in range(len(l)-1) 循环获取生成的索引值 #range(len(l)-1) 获得l的全部索引值,因为计算方式是当前值和后一个值相加,避免尾部越界所以要减一 n = 0 results = [] for t in triangles(): results.append(t) n = n + 1 if n == 10: break
for t in results:
print(t)