zoukankan      html  css  js  c++  java
  • python编程基础之二十七

    列表生成式:[exp for iter_var in iterable]

    同样也会有字典生成式,集合生成式,没有元组生成式,元组生成式的语法被占用了

    字典生成式,集合生成式,就是外面那个括号换成{}  字典里面一个个是键值对,集合可以与之区分

    生成器:有两种写法:

    一种就是写一个生成式放到()里面,这就是一个生成器,

     1 #将列表生成式中的[]替换成()
     2 ge = (x for x in range(1,6))
     3 print(ge,type(ge))
     4 
     5 #生成器需要通过next()方法获取数据,调用一次则返回一个数据
     6 print(next(ge))
     7 print(next(ge))
     8 print(next(ge))
     9 print(next(ge))
    10 print(next(ge))
    View Code

    yiled表达式

      yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执

     1 #通过函数和yield关键字生成
     2 #使用了 yield 的函数被称为生成器(generator)
     3 #yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次从它离开的地方继续执行
     4  def test(n):
     5   for i in range(1,n + 1):
     6       yield i
     7       #print(i)
     8 #得到生成器
     9  result = test(10)
    10  print(result)
    11  
    12  #生成器只能遍历一次, 所以下面不会有任何输出
    13  for x in result:
    14       print(x)
    15       
    View Code

    迭代对象:可以用for in 结构的都是迭代对象,常用的有list , set ,tuple ,dict, str,生成器

    判断是否是迭代器,可以用isinstance(,Iterable)判断,需要导入Iterable

    1 #引入 from collection  import Iterable
    2 from collections import Iterable
    3 print(isinstance("",Iterable))#True
    4 print(isinstance({},Iterable))#True
    5 print(isinstance((),Iterable))#True
    6 print(isinstance(1,Iterable))#False
    View Code

    迭代器:那些生成器都是迭代器,迭代器都是迭代对象,但是迭代对象不一定是迭代器

    判断方式也是用同一个函数参数要换成Iterator  需要导入Iterator , Iterable

    1 from collections import  Iterator,Iterable
    2 print(isinstance([],Iterator))  #False
    3 print(isinstance((),Iterator))  #False
    4 print(isinstance({},Iterator))  #False
    5 print(isinstance("",Iterator))  #False
    6 print(isinstance((x for x in range(0,6)),Iterator))  #True 生成器是迭代器
    7 print(isinstance((x for x in range(0,6)),Iterable)) #True 生成器也是迭代对象
    迭代器

     迭代器可以和迭代对象之间转换

    1 print(isinstance(iter([]),Iterator)) #True
    2 print(isinstance(iter(()),Iterator)) #True
    3 print(isinstance(iter({}),Iterator)) #True
    4 print(isinstance(iter(""),Iterator)) #True
    5 
    6 l2 = iter(l1)  #将列表转换为迭代器
    7 print(next(l2))  #使用next获取迭代器中的元素
    View Code
  • 相关阅读:
    SPOJ LCS2
    SPOJ NSUBSTR
    1977: [BeiJing2010组队]次小生成树 Tree
    2002: [Hnoi2010]Bounce 弹飞绵羊
    P3690 【模板】Link Cut Tree (动态树)
    P2093 [国家集训队]JZPFAR
    2648: SJY摆棋子
    HDU 2966 In case of failure
    bzoj 一些题目汇总
    BZOJ3653谈笑风生——可持久化线段树+dfs序
  • 原文地址:https://www.cnblogs.com/higer666/p/9441817.html
Copyright © 2011-2022 走看看