python迭代器的好处,for循环和迭代器哪个更高效
迭代器是一个可以记住导线测量位置的对象。
迭代器对象从集合中的第一个元素开始访问,直到所有元素都被访问。迭代器不能向前递减。
一.下一步
语法:next(迭代器(,默认值)))
描述:
1.该函数需要接收可重复对象参数,每次调用都将返回可重复对象的下一个元素。如果所有元素都已返回,则会引发StopIteration异常。
a=ITER(ABCD).
是下一个(a)
一个
是下一个(a)
b
是下一个(a)
c
是下一个(a)
迪
2.该函数可以接收可选的默认参数。传递默认参数后,如果repeatable对象中还没有返回元素,则按顺序返回该元素的值;如果返回所有元素,则返回默认情况下指定的默认值,而不引发StopIteration异常。
a=ITER(ABCD).
下一个(a, e )))).
一个
下一个(a, e )))).
b
下一个(a, e )))).
c
下一个(a, e )))).
迪
下一个(a, e )))).
e
下一个(a, e )))).
e
二。国际热核聚变实验堆
语法:ITER(object(,sentinel]))。
描述:
1.该函数返回一个可重复的对象。
2.如果未提供第二个参数,则第一个参数是一个集合(字典、集合、不变集合))或一个序列假脱机程序,它实现一个支持可重复协议的集合(即__iter__)()方法。
A=ITER((a) :1,b) :2))字典集
A
是下一个(a)
一个
是下一个(a)
b
A=ITER(ABCD) #字符串序列
A
是下一个(a)
一个
是下一个(a)
b
是下一个(a)
c
是下一个(a)
迪
3.如果提供了第二个参数sentinel,则第一个参数必须是可调用的对象。创建在调用__next__方法时调用的迭代对象,并在返回值等于sentinel值时引发StopIteration异常以终止迭代。
类迭代器测试:
def __init__(self):
self.start=0
self.end=10
efget_next_value(self):
电流=自我启动
如果当前自结束:
self.start=1
否则:
提升停止迭代
返回当前状态
Itertest=itertest(#实例化类
A=ITER (# ITERTest。get _ next _ value,4) ITER测试. GET _ NEXT _ VALUE是一个sentinel值为4的可调用对象。
A
是下一个(a)
0
是下一个(a)
一个
是下一个(a)
2
是下一个(a)
三
三。范围
语法:range(start,stop[),step])
描述:
1.range函数用于生成一个range对象。范围类型是表示整数范围的类型。
2.您可以直接传递结束整数来初始化范围类型。默认值为0。结束整数应该如下所示
大于0时,可以小于等于0,但小于等于0,生成的range对象实际上不包含元素。
a=范围(5)
a
范围(0,5)
镜头(a)
五
对于a中的x:print(x)
0
一个
2
三
四
B=range(0) #传入0,一个空的range对象
镜头(b)
0
C=range(-5) #传入一个负数,一个空的range对象
镜头(c)
0
3.范围类型可以通过传入起始整数和结束整数来初始化。生成的范围类型包含起始整数(含)和结束整数(不含)之间的所有整数。
a=范围(1,5)
a
范围(1,5)
对于a中的x:print(x)
一个
2
三
四
4.传入一个起始整数和一个结束整数,也可以同时传入一个步长值来初始化范围类型。生成的范围类型包括起始整数(包括)和结束整数(不包括),它们由步长值过滤。
a=范围(1,10,3)
a
范围(1,10,3)
对于a中的x:print(x)
一个
四
七
5.初始化范围类型时,起始整数和结束整数遵循左臂右开的原则,即起始整数包含,结束整数不包含。
a=范围(1,5)
a
范围(1,5)
a中的x:print(x)#包含1,而不是5。
一个
2
三
四
6.range接收的参数必须是整数,不能是浮点数和其他数据类型。
7.range实际上是一种不可变的序列类型,可以进行取元素、切片等序列操作,但其中元素的值不能修改。
a=范围(1,5)
一个[0] #取元素
一个
[:-2] #切片
范围(1,3)
A[1]=2 #修改元素值
回溯(最近一次呼叫):
文件“”中的第1行
a[1]=2
type error:“range”对象不支持项分配
四。地图
语法:map(函数,iterable,)
描述:
1.该函数接受函数类型参数和迭代器的一个或多个参数,并返回迭代器。这个迭代器中的每个元素都是函数参数实例调用迭代器的结果。
a=地图(顺序,“abcd”)
a
列表(a)
[97, 98, 99, 100]
2.当传入多个iterable对象时,函数的参数必须提供足够的参数,以保证每个iterable对象的同一索引的值能够正确地传入函数。
A=map(ord, abcd , efg) #传入了两个iterable对象,所以传入的函数必须能接收两个参数,ord不能接收两个参数,所以报错。
列表(a)
回溯(最近一次呼叫):
文件“”中的第1行
列表(a)
TypeError: ord()只接受一个参数(给定了2个)
3.当传入多个迭代对象,并且它们的元素长度不一致时,生成的迭代器只达到最短的长度。
定义f(a,b):
返回a b
A=map(f, abcd , efg) #选择的最短长度为3。
列表(a)
[ae , bf , cg]
4.map函数是函数式编程的典型例子。
动词(verb的缩写)活力
语法:zip(*iterables)
描述:
1.函数是聚合每个传入的迭代器中相同位置的元素,返回一个新的元组类型迭代器。
x=[1,2,3]
y=[4,5,6]
xy=zip(x,y)
xy #xy的类型是zip类型。
#导入可迭代
从集合导入迭代
is instance(xy,iterable) #确定对象是否可以迭代。
真实的
list(xy) #结果
[(1, 4), (2, 5), (3, 6)]
2.如果传递的迭代器的长度不一致,那么长度最短的迭代器将在迭代后停止聚合。
X=[1,2,3] #长度3
Y=[4,5,6,7,8] #长度5
List(zip(x,y)) #取最小长度3
[(1, 4), (2, 5), (3, 6)]
3.如果只传入一个迭代器,则返回的单个元素元组的迭代器。
列表(zip([1,2,3])
[(1,), (2,), (3,)]
4.如果没有参数传入,则返回一个空迭代器。
列表(zip())
[]
5.zip(*[iter(s)]*n)相当于调用zip(iter(s),iter(s),iter(s))。
x=[1,2,3]
列表(zip(*[x]*3))
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
列表(zip(x,x,x))
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
不及物动词过滤器
语法:filter(function,iterable)
描述:
1.过滤功能用于过滤序列。过滤方法是使用传入函数调用循环序列的元素。如果函数计算的结果为真,则元素将被保留,否则,元素将被丢弃。
A=list(range(1,10)) #定义序列
a
[1, 2, 3, 4, 5, 6, 7, 8, 9]
If _ odd (x): #定义奇数判断函数
return x%2==1
List(filter(if_odd,a)) #过滤序列中的奇数
[1, 3, 5, 7, 9]
2.当函数参数传入None时,如果序列中的元素值为False,则自动丢弃。
C=[ ,False, I ,{}] #定义序列
c
[ ,False, I ,{}]
List(filter(None,c))# filter函数是None,它自动丢弃序列中的假值。空字符串、假值、空序列都是假值,所以丢弃。
[我]
七、列表式迭代
L=[1,2,3,4,5]
对于范围内的I(len(L)):
L[i]=10
打印(左)
[11, 12, 13, 14, 15]
L=[x ^ 10代表L中的x]
打印(左)
[21, 22, 23, 24, 25]
八、DICT型迭代
D=字典(a=1,b=2,c=3)
对于排序后的k(D):print(k,D[k],end= )
1 2 3
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。