python 迭代详解_python中迭代和解析

1、迭代工具包括:for循环,列表解析,in成员关系测试,及(map内置函数,sorted,zip,enumerate,filter返回可迭代对象)

2、文件迭代器

里面有一个__next__方法,每次调用时会返回文件中的下一行,当遇到文件末尾时,会引发StopIteration异常,而不是返回空字符串

f = open('script1.py)

f.__next()__

3、手动迭代:iter和next

python3.0提供了一个内置函数next,他会自动调用__next__方法。

例如:

X.next() 等价于  X.__next__()

iter(X) 内置函iter会把X转化为可迭代对象,也就是带有next的方法。

4、列表和很多其他内置对象,不是自身的迭代器,他们支持多次打开迭代器。

例如:

L = [1,2,3]

print(iter(L) is L) #输出:False

#print(L.__next__()) #会抱错

I = iter(L)

print(I.__next__()) #输出:1

print(next(L)) #输出:2

5、列表解析

[表达式 for 变量 in 目标 if 条件]

例如:

L = [1,2,3,4,5]

temp = [x*2 for x in L if x%2==0]

print(temp) #输出:[4, 8]

或者

L1 = ['a','b','c','d']

L2 = [1,2,3,4,5]

temp = [(a,b) for a in L1 for b in L2]

print(temp) #输出:[('a', 1), ('a', 2), ('a', 3), ('a', 4), ('a', 5), ('b', 1), ('b', 2), ('b', 3), ('b', 4), ('b', 5), ('c', 1), ('c', 2), ('c', 3), ('c', 4), ('c', 5), ('d', 1), ('d', 2), ('d', 3), ('d', 4), ('d', 5)]

6、sum,any,all,max,min这些函数用于任何可迭代对象

print(sum([1,2,3,4,5])) #计算和

print(any([1,2,3,4,5])) #只要所给对象是不是空,就返回True

print(all([1,2,3,4,5])) #所有对象为真时,返回True,否则返回False

print(max([1,2,3,4,5])) #计算最大值

print(min([1,2,3,4,5])) #计算最小值

7、解包:

def f(a,b,c,d):print(a,b,c,d,sep='&')

f(1,2,3,4) #输出:1&2&3&4

f(*[1,2,3,4]) #输出:1&2&3&4

unzip

x = (1,2)

y = (3,4)

print(list(zip(x,y)))#输出:[(1,3),(2,4)]

print(*zip(x,y))

a,b = zip(*zip(x,y))

print(a,b,sep=' ')

8、range返回的并不是迭代器,但是可以通过iter函数产生多个迭代器,zip,map,filter则不支持多个迭代器

例如:

L = range(5)

#print(next(L)) 报错

t = iter(L)

print(next(t)) #输出:0

print(next(t)) #输出:1

print(next(t)) #输出:2

print('*'*8) #输出:3

k = iter(L)

print(next(k)) #输出:0

print(next(k)) #输出:1

print(next(k)) #输出:2

9、字典迭代器

D = {'a':1,'b':2,'c':3}

t = iter(D)

for i in t:

print(i,end=',')

#输出:

a,b,c

10、其他迭代器

使用yield语句,用户定义的函数可以转化为可迭代的生成器函数

当编写圆括号时候,列表解析转化为可迭代生成器函数

用户定义的类通过__iter__或者__getitem__运算符重载变得可迭代

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值