python3学习笔记(6)_iteration

时间:2023-01-15 05:08:32
 #python3 学习笔记17/07/10
# !/usr/bin/env python3
# -*- coding:utf-8 -*- #类似 其他语言的for循环,但是比for抽象程度更高
# for ... in #通过collections模块的 Iterable 类型判断一个对象是否可以迭代
from collections import Iterable
from collections import Iterator #list 有下标可以迭代,dict 没有下标,也可以迭代
d = {"a":1,"b":2,"c":3}
#dict 默认是迭代 key的,且dict的迭代结果顺序可能不一样
for key in d:
print(key) #如果要迭代value ,需这样做
for value in d.values():
print(value) #如果要同时迭代 key 和 value,可以这样做
for key, value in d.items():
print(key, value) #判断 字符串'abc' 是否可迭代
print(isinstance("abc",Iterable)) #判断list 是否可以迭代
print(isinstance(['a','b','c'],Iterable)) #判断 整数是否可迭代
print(isinstance(123,Iterable)) #通过enumerate 函数可以把一个list变成 索引-元素对,同时迭代之
for i,value in enumerate(['a','b','c']) :
print(i, value) #for循环里同时引用两个变量
for x, y in [(1,2),(3,4),(5,6)]:
print(x, y) #可以直接作用于for循环的数据类型有以下几种:
#一类是集合数据类型,lsit,tuple,dict,set,str
#一类是generator,包括生成器和带yield的generator function
# 这些可以直接作用于for循环的对象统称为可迭代对象:Iterable
# 可以使用 isinstance()判断一个对象是否是 Iterable print(isinstance([],Iterable))#True
print(isinstance({},Iterable))#True
print(isinstance("abc",Iterable))#True
print(isinstance((x for x in range(10)), Iterable))#True
print(isinstance(100, Iterable))#False #生成器不但可以作用于 for循环,还可以被 next() 函数不断调用,并返回下一个值,直到最后抛出StropIteration
#错误,表示无法继续返回下一个值 #可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator #同样可以使用 isinstance() 判断一个对象是否是Iterator对象:
print(isinstance((x for x in range(10)), Iterator))#True
print(isinstance([], Iterator))#False
print(isinstance({}, Iterator))#False
print(isinstance("abc",Iterator))#False #可以使用 iter() 函数把 lsit,dict,str等 Iterable变为 Iterator
print(isinstance(iter([]), Iterator))#True
print(isinstance(iter("abc"), Iterator))#True #Iterator 对象支持 next()函数,并不断返回下一个数据,直到抛出StopIreration错误,这是一个有序的数据流序列,我们不知道序列的长度。但是由于序列是一个一个生成,可以生成无限多个元素,可见,他可以表示所有自然数。而list 是做不到这一点的