列表生成式、生成器、迭代

1、列表生成式 python

一、range()能够生成整数序列算法

range(a,b)生成a-b的整数序列,包括a,但不包括bapp

range(n)生成0-n的整数序列,包括0,但不包括n函数

将整数序列转成list,可使用list(range(n))spa

二、能够在列表中加计算式生成特定规律的列表code

[x*x for x in range(1,11)]就生成了[1x1,2x2,3x3,...,10x10]的列表对象

三、还可使用多层循环生成列表generator

[m+n for m in 'ABC' for n in 'XYZ']string

[变量的计算式 变量1的for循环 变量2的for循环 变量n的for循环]it

四、dict的items()能够同时迭代key和value

>>> d = {'x': 'A', 'y': 'B', 'z': 'C' } >>> [k + '=' + v for k, v in d.items()] ['y=B', 'x=A', 'z=C']

五、计算式还可使用变量的方法

例如[s.lower() for s in L]

2、生成器

一、第一种生成器的建立方式

列表生成式一旦赋值,那么所使用的存储空间就肯定下来了,若是只访问前部的部分元素,那么后面的空间就浪费了,所以提出了生成器的概念,给生成器赋予某种算法规律,不须要建立完整的list,而只须要建立一个生成器,一边循环一边计算,值在未被计算出来前不占用存储,节省存储空间。

生成器建立以下:

g = (x * x for x in range(10))

通常使用for循环迭代生成器

for n in g:  print(n)

二、第二种生成器的建立方式

用函数定义推算规则,若是一个函数定义中包含yield关键字,那么这个函数就是一个generator

例如斐波那契数列的generator建立以下:

def fib(n):
a,b=0,1
for i in range(n):
yield b
a,b=b,a+b

调用时以下:

for  k in fib(6):

  print(k)  

调用时,当函数中遇到yield时,返回打印yield 后面的值,而后继续执行yield以后的语句

generator到结束时有StopIteration错误,若是捕获到该错误就知道到结尾了

三、杨辉三角的打印list

       1

1   1
      1   2   1
    1   3   3   1
  1   4   6   4   1
1   5   10  10  5   1
def YH():
L=[1]
while True:
yield L
L=[L[i]+L[i+1] for i in range(len(L)-1)]
L.insert(0,1)
L.append(1)
n=0
for i in YH():
print(i)
n+=1
if n>=10:
break

 

3、迭代器

一、凡是可做用于for循环的对象都是Iterable类型;

凡是可做用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

集合数据类型如listdictstr等是Iterable但不是Iterator,不过能够经过iter()函数得到一个Iterator对象。

二、能够经过isinstance(a,Iterator)和isinstance(a,Iterable)来判断类型

相关文章
相关标签/搜索