• python各种推导式以及内置函数


    今日主要内容:

    1.迭代器和生成器补充,

    2.生成器表达式和列表表达式.以及各种推导式

    3.内置函数

    1) 迭代器和生成器补充

    1.查看一个对像是否是可迭代的,以及是否是迭代器.还可以通过导入这两个方法来实现

    示例:

    from collections import Iterable  #导入看是否可迭代的对像
    from collections import Iterator  #导入查看是否是迭代器
    s = "123"
    f = isinstance(s,Iterable)
    print(f)
    f2 = isinstance(s,Iterator)
    print(f2)
    
    
    """
    运行结果是
    True
    False
    """

    2.可迭代对像的特点是内部含有__iter__这个方法,迭代器特点是内部含有__iter__方法和__next__这个方法.

    3.如下示例:注意生成器是如何生成的.

    def fun():
        for i in range(10):
            yield  i
    gen= fun()  # 这里的操作是生成一个生成器,注意,这里是并不执行的.只是一个生成器.

    4.生成器有两种生成方法,一种是函数中带有yield,即通过生成器函数来生成.一种是通过生成器表达式来生成.

    5.可迭代对像变成迭代器的方法有如下两种.

    一种s.__iter__()这个就是生成了迭代器

    一种是iter(对像)这个通过iter函数来实现

    6迭代器的优点,主要有如下三个优点:

    一.节省内存

    二.惰性机制

    三.单向不可逆

    7.通过dir来查看一个可迭代对像是否是可迭代的,以及是否是生成器,

    代码示例如下:

    s ="123"
    print("__iter__" in  dir(s))
    print("__next__" in  dir(s))

    2).生成器表达式和列表表达式.以及各种推导式

    首先看一下列表表达式,示例如下:

    lst = ["校服%s" % i for i in range(10)]
    print(lst)

    具体的格式如下:

     [变量(加工后的变量) for 变量 in iterable] 循环模式

    列表推导式有两种模式,一种是上面说的循环模式,一种是条件模式.

     分类:
     [变量(加工后的变量) for 变量 in iterable] 循环模式
     [变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式

    下面是示例代码:

    #10以内所有数的平方
    lst = [i**2 for i in range(11)]
    print(lst)
    #30以内所有能被3整除的数的平方
    lst1 = [i*i for i in range(1,31) if i % 3 == 0 ]
    print(lst1)
    
    #100 以内所有的奇数.
    lst2 = [i for i in range(100) if i % 2 == 1]
    print(lst2)

    生成器就是把[]换成()列表表达式就变成了,生成器表达式.

    如上面的代码换成生成器,并且表现出来,如下:

    #10以内所有数的平方
    gen = (i**2 for i in range(11))  #生成一个生成器
    print(gen.__next__())
    #30以内所有能被3整除的数的平方  #
    gen1 = (i*i for i in range(1,31) if i % 3 == 0 )    #生成一个生成器
    print(gen1.__next__())
    
    #100 以内所有的奇数.
    gen2 = (i for i in range(100) if i % 2 == 1)   #生成一个生成器
    print(gen2.__next__())
    
    #v如果想全部取出来的话,可以用for
    for i in gen2:
        print(i)

    为什么有生成器:
     生成器本身是自己用python代码构建的,这样就满足了个性化需求,满足以后你工作中需要.

    下面有一个示例题:

     names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]

    获取上面列表中的名字里面有两个e的,放在新的列表中.

    示例代码:

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    lst = [name for i in names for name in i if name.count("e") ==2]
    print(lst)

    各种推导式:

    字典推导式:

    #将一个字典的key和value对调
    mcase = {'a': 10, 'b': 34}
    dic = {mcase[i]:i for i in mcase}
    print(dic)
    
    #例二:合并大小写对应的value值,将k统一成小写
    mcase = {'a': 10, 'b': 34, 'A': 7, 'Z': 3}
    dic2 = {i.lower():(mcase.get(i.upper(),0) + mcase.get(i.lower(),0)) for i in mcase}
    print(dic2)

    集合推导式:

    squared = {x**2 for x in [1, -1, 2]}
    print(squared)
    # Output: set([1, 4])

    练习题:

    例1:  过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母

    例2:  求(x,y)其中x是0-5之间的偶数,y是0-5之间的奇数组成的元祖列表

    例3:  求M中3,6,9组成的列表M = [[1,2,3],[4,5,6],[7,8,9]]

    3)内置函数

    内置函数: 一些常用的功能,python都给你封装好了,供你直接使用.

    作用域相关:

    globals()  无论在哪里调用用户打印的都是全局的.

    locals()  只打印当前函数的变量,不打印上层函数的变量,如果这个在主函数打印的话,和globals一个效果.

    其他相关:

    eval 执行字符串类型的代码,并返回最终结果。

    示例:

    f = eval("1+2")
    print(f)  #执行后会返回执行结果
    #这个需要注意的是
    dic = eval("{'a':2,'b':3}")
    print(dic)
    print(type(dic))
    
    """
    执行结果如下:
    3
    {'a': 2, 'b': 3}
    <class 'dict'>
    """

    exec 执行字符串类型的代码。不返回任何值.

    示例:

    code = '''
    for i in range(1, 11):
        print(i)
    '''
    print(exec(code))
    
    """
    执行结果如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    None
    
    """

    print()函数,这个有两点要注意,有两个参数

    print(123,456,sep=",",end="")
    
    """
    执行结果:
    123,456
    sep 为变量之间用什么切割,end表示是否加换行
    """

     hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。注意每次相同内容的hash值是不一样的.
    # print(hash('name'))
    # print(hash(7117817419752622577))
    # print(hash('name1'))
    # print(hash('name2'))
    # print(hash('name3'))
    # print(hash(100))
    # print(hash(1))
    # print(hash(True))

    callable 函数,查看对像是否是可调用的.

    比如str是不可调用的,函数是可调用的.示例如下:

    str = "133"
    def fun():
        pass
    print(callable(str))
    print(callable(fun))
    """
    执行结果如下:
    False
    True
    """
  • 相关阅读:
    spring bean的三种管理方式·
    mybatis解决字段名和实体属性不相同
    python字符串格式化方法%s和format函数
    myeclipse配置springmvc教程
    2019ICPC南昌站
    浅谈可持久化线段树(主席树)
    2019CCPC厦门站总结
    牛客练习赛53 E-老瞎眼pk小鲜肉(思维+线段树+离线)
    2019牛客暑期多校训练营(第一场)A
    [The Preliminary Contest for ICPC Asia Nanjing 2019] L-Digit sum
  • 原文地址:https://www.cnblogs.com/ahliucong/p/9204251.html
Copyright © 2020-2023  润新知