zoukankan      html  css  js  c++  java
  • Python笔记-高级特性

    1、迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration)。

    如果要迭代value,可以用for value in d.values(),如果要同时迭代key和value,可以用for k, v in d.items()

    如果要对list实现类似Java那样的下标循环怎么办?Python内置的enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身:

    for i,value in enumerate(['a','b','c']):
        print(i,value)
        
    索引-元素对
    #迭代查找一个list(随机数生成一个list)的最大值与最小值,并返回一个tuple
    
    import random
    
    def getRandomList():
        ranList=[]
        for i in range(10):
            ranList.append(random.choice(range(101)))
        print('生成的随机list为',ranList)
        return ranList
    def find_min_max(ranList):
        minNums=maxNums=ranList[0]
        for x in ranList:
            if x<minNums:
                minNums=x
        maxNums=max(ranList)
        return (minNums,maxNums)
    #dict={'max':maxNums,'min':minNums}
    print(find_min_max(getRandomList()))

    2、列表生成式

    练习:如果list中既包含字符串,又包含整数,请讲str类型数据转换为小写

    l = ['Hello', 'World', 18, 'Apple', None]
    print('原list:',l)
    #此方法自动筛除了非str类型元素
    print([x.lower() for x in l if isinstance(x,str)] )
    #改进版
    L=[]
    for element in l:
        if isinstance(element,str)==True:
            L.append(element.lower())
        else:
            L.append(element)
    print(L)

    3、生成器

    在Python中,一边循环一边计算的机制,称为生成器:generator。

     斐波拉契数列用列表生成式写不出来,但是,用函数把它打印出来却很容易:

    def fib(x):
        n,a,b=0,0,1
        while n<x:
            print(b)
            a,b=b,a+b
            n=n+1
        return
    >>> fib(6)
    1
    1
    2
    3
    5
    8
    'done'

    仔细观察,可以看出,fib函数实际上是定义了斐波拉契数列的推算规则,可以从第一个元素开始,推算出后续任意的元素,这种逻辑其实非常类似generator。

    也就是说,上面的函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了:

    def fib(max):
        n, a, b = 0, 0, 1
        while n < max:
            yield b
            a, b = b, a + b
            n = n + 1
        return 'done'

    这就是定义generator的另一种方法。如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:

    4、迭代器

    未完待续......

  • 相关阅读:
    行政区划遮罩 -Leaflet
    WebGIS vs WebGL图形编程
    oracle 中 group by 加强
    Nagios监控服务搭建
    MySQL触发器使用详解
    mybatis--一对多关联
    mybatis--一对一关联查询
    mybatis--实现数据库增删改查
    mybatis--使用接口注解的方式实现Helloword
    mybatis--第一个mybatis程序
  • 原文地址:https://www.cnblogs.com/liberate20/p/10683105.html
Copyright © 2011-2022 走看看