切片
利用切片操作,实现一个trim()函数,去除字符串首尾的空格,注意不要调用str的strip()方法:
if len(s) == 0:
return s
elif s[0] == ' ':
return (trim(s[1:]))
elif s[-1] == ' ':
return (trim(s[:-1]))
return s
迭代
如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。
请使用迭代查找一个list中最小和最大值,并返回一个tuple:
def findMinAndMax(L):
max = min = L[0]
for i in L:
if max<i:
max = i
for j in L:
if min>j:
min = j
return j,i
if __name__ == '__main__':
if findMinAndMax ( [7] ) != (7 , 7):
print ( '测试失败!' )
elif findMinAndMax ( [7 , 1] ) != (1 , 7):
print ( '测试失败!' )
elif findMinAndMax ( [7 , 1 , 3 , 9 , 5] ) != (1 , 9):
print ( '测试失败!' )
else:
print ( '测试成功!' )
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
使用内建的isinstance函数可以判断一个变量是不是字符串:
x = ‘abc’
y = 123
isinstance(x, str)
True
isinstance(y, str)
False
请修改列表生成式,通过添加if语句保证列表生成式能正确地执行:
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if isinstance(s,str)]
print(L2)
if L2 == ['hello', 'world', 'apple']:
print('测试通过!')
else:
print('测试失败!')
生成器
在Python中,这种一边循环一边计算的机制,称为生成器:generator。
函数是顺序执行,遇到return语句或者最后一行函数语句就返回。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
杨辉三角定义如下:
1
/ \
1 1
/ \ / \
1 2 1
/ \ / \ / \
1 3 3 1
把每一行看做一个list,试写一个generator,不断输出下一行的list:
def triangles():
L=[1]
yield L
while True:
L =[ L[j] +L[j+1] for j in range(len(L)-1)]
L.insert(0,1)
L.append(1)
yield L
n = 0
for t in triangles ():
print ( t )
n = n + 1
if n == 10:
break
迭代器
直接作用于for循环的数据类型有以下几种:
一类是集合数据类型,如list、tuple、dict、set、str等;
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable。
集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。