ITPub博客

首页 > 应用开发 > Python > Python3中的列表生成式、生成器与迭代器实例详解

Python3中的列表生成式、生成器与迭代器实例详解

原创 Python 作者:ckxllf 时间:2020-03-31 16:36:03 0 删除 编辑

  列表生成式

  Python内置的一种极其强大的生成列表 list 的表达式。返回结果必须是列表。

  基本语法:

  [ 变量表达式 for 变量 in 表达式 ]

  示例

  a = [x ** 2 for x in range(1, 10)]

  b = [x * x for x in range(1, 11) if x % 2 == 0]

  c = [m + n for m in 'ABC' for n in '123']

  d = {'Java': "99", 'C': "99", 'C++': "99"}

  L = [k + '=' + v for k, v in d.items()]

  print(a)

  print(b)

  print(c)

  print(L)

  通过列表生成式,可以直接创建一个列表,但是,受到内存的限制,列表容量是有限的,当列表元素很大的时候,会很浪费内存空间。所以可以通过生成器 Generator 生成。

  生成器 Generator

  Generator 是一种一边循环一边计算的机制。

  应用场景:只需要获得 list 中的前几个元素,节省存储空间。

  使用 () 创建列表生成器

  把列表生成式的中括号 [] 修改为圆括号即可 ()

  a = (x ** 2 for x in range(1, 10))

  b = (x * x for x in range(1, 11) if x % 2 == 0)

  c = (m + n for m in 'ABC' for n in '123')

  d = {'Java': "99", 'C': "99", 'C++': "99"}

  L = (k + '=' + v for k, v in d.items())

  print(a)

  print(b)

  print(c)

  print(L)

  打印结果如下

  at 0x1052ec2b0>

  at 0x1052ec468>

  at 0x1052ec4c0>

  at 0x1052ec518>

  使用 next 调用元素:

  print(a.__next__())

  print(a.__next__())

  print(a.__next__())

  print(a.__next__())

  next 方法会一个个的返回元素值,调用一次,返回一次下一个位置的元素。

  该方法在没有元素可以调用的时候,会返回 StopIteration 的错误

  使用循环调用元素

  for i in a:

  print(i)

  该方法的好处,是不会返回 StopIteration 的错误

  yield 关键字 创建 Generator

  如果一个函数包含了yield 关键字,那么该函数就不再是普通的函数,而是一个生成器 Generatior。

  将 print(sum) 修改为 yield(sum),即将原来的函数,修改为了生成器。

  def fib(n):

  sum = 0

  i = 0

  while (i

  sum = sum + i

  i += 1

  yield(sum)

  print(type(fib(10)))

  for x in fib(10):

  print(x) 郑州妇科医院哪家好 http://m.120ask.com/zhenshi/

  包含 yield 语句的函数会被特定的编译成生成器。可以吧生成器理解为迭代器。

  在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。

  Generator 的工作原理,是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。

  对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

  以下实例使用 yield 实现斐波那契数列

  #!/usr/bin/python3

  import sys

  def fibonacci(n): # 生成器函数 - 斐波那契

  a, b, counter = 0, 1, 0

  while True:

  if (counter > n):

  return

  yield a

  a, b = b, a + b

  counter += 1

  f = fibonacci(10) # f 是一个迭代器,由生成器返回生成

  while True:

  try:

  print (next(f), end=" ")

  except StopIteration:

  sys.exit()

  迭代器 iterator

  迭代器是访问集合元素的一种方式

  迭代器有两个方法,生成迭代器 iter(),返回迭代器的下一个项目 next()

  迭代器对象从集合的第一个元素开始访问,知道所有元素被访问结束。迭代器只能往前,不能回退。

  字符串、列表、元组 都可以用于创建迭代器

  迭代器 iterator 和可迭代对象 iterable 的区别在于:

  可以直接作用于for循环的对象统称为可迭代对象:Iterable,list、tuple、dict、set、str、Generator 等等。

  可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

  使用 iter 创建迭代器list、dict、str等数据类型不是Iterator,但是可以通过 iter() 来创建迭代器

  list=[1,2,3,4]

  it = iter(list) # 创建迭代器对象

  print (next(it)) # 输出迭代器的下一个元素

  1

  print (next(it))

  2


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69945560/viewspace-2683631/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-08-16

  • 博文量
    204
  • 访问量
    262637