zoukankan      html  css  js  c++  java
  • Python Day15

    一 生成器的调用方法

        生成器里面的值的只能按顺序调用一次,只能向前,不能后退。

         生成器里面的值只是在调用的时候才被执行。

    def aa():
        yield from [1,2,3]
    a=aa()
    for i in a:
        print(i)
        print(list(a))
    
    输出结果
    
    
    1
    [2, 3]

        

      send:1 和next的用法一样,执行生成器,执行时必须带一个参数

        2 send和next的起止位置完全相同,在生成器send关键字执行开始之前,需要先用next激活这个生成器。

        3 send可已将一个值当作信号量传递到函数中去

    def aaa():
        print(123)
        a=yield 1
        print(a)
        b=yield 2
        print(b)
        c=yield 3
        print(c)
        yield 4
    aa=aaa()
    print(aa.__next__())
    print(aa.send(10))
    print(aa.send(20))
    print(aa.send(30))
    
    输出结果
    123
    1
    10
    2
    20
    3
    30
    4

    如果yield前面有个变量的话,就用send执行,并传入一个值。

      只要用send传递参数的时候,必须在生成器中海油一个未被返回的yield

    二 列表推导式

      列表推导式就是将一些能简单执行的代码,用更简单的代码实现。

      列表推导式格式:print([返回结构 执行对象  if判断条件])

    例一:30以内所有能被3整除的数

    multiples = [i for i in range(30) if i % 3 is 0]
    print(multiples)
    # Output: [0, 3, 6, 9, 12, 15, 18, 21, 24, 27]

    例二:找到嵌套列表中名字含有两个‘e’的所有名字

    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
             ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    
    print([name for lst in names for name in lst if name.count('e') >= 2])  # 注意遍历顺序,这是实现的关键

    列表表达式格式:

      

    # print([i for i in range(30) if i%3==0])

    而生成器表达式就和列表推导式差不多,就是将列表推导式的中括号换成小括号,这就是生成器表达式。

      生成器 表达式:生成器=(返回结构 执行对象  if判断条件)

     print=((i for i in range(30) if i%3==0))

    面试题:

    # def aa(n,i):
    #     return n+i
    # def bb():
    #     yield from range(4)
    # b=bb()
    # for n in [1,10,5]:
    #     b=(aa(n,i) for i in b)
    # print(list(b))     [15,16,17,18]
    # def aa(n,i):
    #     return n+i
    # def bb():
    #     yield from range(4)
    # b=bb()
    # for n in [1,10,5]:
    #     g=(aa(n,i) for i in b)
    # print(list(g))    [5,6,7,8]

    注意:这两个执行结果不同

      在这里的列表元素中的元素有几个,就会调用几次,只有在调用的时候值才会起作用,所以只用最后一个元素的值才能起作用。

    原因:如果变量名是执行的对象,那么没执行一次,就会叠加一次

      而变量名不是执行的对像,没执行一次就会从头开始执行进行下次执行,因此两次执行的结果不同

    三 其他内容

     1 字典推导式:主要是用于在字典,将一些简单的代码更简单化。

    d={'k1':1,'k2':2}
    print({d[i]:i for i in d })

     2 集合推导式:和列表推导式功能差不多,但是他可以去掉元素的重复。

    注意1 :尽量用推导式简化代码,怎强代码的可读性

    注意2:如果推导式过于复杂,就不要用推到式,还是用普通的python代码就好。

  • 相关阅读:
    2. Add Two Numbers
    1. Two Sum
    22. Generate Parentheses (backTracking)
    21. Merge Two Sorted Lists
    20. Valid Parentheses (Stack)
    19. Remove Nth Node From End of List
    18. 4Sum (通用算法 nSum)
    17. Letter Combinations of a Phone Number (backtracking)
    LeetCode SQL: Combine Two Tables
    LeetCode SQL:Employees Earning More Than Their Managers
  • 原文地址:https://www.cnblogs.com/liuduo/p/7481654.html
Copyright © 2011-2022 走看看