一.切片
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)