廖雪峰python教程习题——高级特性

切片

利用切片操作,实现一个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对象。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值