python for 迭代器_python-条件循环及迭代器生成器

条件控制

条件为假:0,False,' ',None,空容器(比如[],(),{},set())

如果if后面的语句太长,可以使用换行并且添加\

循环

pass是空语句,是为了保持程序结构的完整性。

pass 不做任何事情,一般用做占位语句,为了避免不必要的报错

可以使用enumerate()函数进行遍历

对于序列,其会输出索引及对应的值

for index, item in enumerate(sequence):

# process(index, item)

sequence =[12,34,34,23,45,76,89]fori,j inenumerate(sequence):print(i,j)012134234323445576689

迭代器

迭代器是一个可以记住遍历的位置的对象

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束

迭代器只能往前不会后退

使用iter()方法对一个可迭代对象创建迭代器

使用next()方法来移动一个迭代器,也可以使用for循环来移动迭代器

list=[1,2,3,4]

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

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

# 1

print (next(it))

# 2

list=[1,2,3,4]it= iter(list)# 创建迭代器对象forxinit:

print(x, end="")

#1234

import sys # 引入 sys 模块

list=[1,2,3,4]

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

while True:

try:

print (next(it))

except StopIteration:

sys.exit()

# 1

# 2

# 3

# 4

生成器

使用了 yield 的函数被称为生成器

生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器

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

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()

# 1

# 2

# 3

# 4

# 5

# 6

# 7

# 8

# 9

# 10

# 11

# 12

# 13

# 14

# 15

# 16

# 17

# 18

# 19

# 20

迭代器函数返回一个迭代器(而不是通常的使用iter()方法来直接生成一个迭代器,因为函数返回值的序列是未知的,如果直接全部算出会占用很大内存,有时候也不需要全部算出)

调用的时候使用next()方法(亦或是for循环的方式),即可移动这个返回的迭代器,一次移动就代表获得一次这个函数的返回值(调用一次计算一次)

一个函数 f,f 返回一个 list,这个 list 是动态计算出来的(不管是数学上的计算还是逻辑上的读取格式化),并且这个 list 会很大(无论是固定很大还是随着输入参数的增大而增大)

这个时候,我们希望每次调用这个函数并使用迭代器进行循环的时候一个一个的得到每个 list 元素而不是直接得到一个完整的 list 来节省内存,这个时候 yield 就很有用

使用小括号包裹推导式会生成生成器对象,而不是元组

a = (2*x for x in range(2))

type(a)

#

遍历

在字典中遍历时,关键字和对应的值可以使用 items() 方法同时解读出来

knights = {'gallahad': 'the pure', 'robin': 'the brave'}

for k, v in knights.items():

print(k, v)

# gallahad the pure

# robin the brave

在序列(除字典之外的序列)中遍历时,索引位置和对应值可以使用 enumerate() 函数同时得到

for i, v in enumerate(['tic', 'tac', 'toe']):

print(i, v)

# 0 tic

# 1 tac

# 2 toe

同时遍历两个或更多的序列,可以使用 zip() 组合(序列之间有对应关系)

questions = ['name', 'quest', 'favorite color']

answers = ['lancelot', 'the holy grail', 'blue']

for q, a in zip(questions, answers):

print('What is your {0}? It is {1}.'.format(q, a))

# What is your name? It is lancelot.

# What is your quest? It is the holy grail.

# What is your favorite color? It is blue.

要反向遍历一个序列,首先指定这个序列,然后调用 reversed() 函数

要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值