Python迭代器

123 阅读3分钟

「这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战

1.迭代器(iterator)
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问结束为止,迭代器只能往前不会后退。

迭代是一个怎样的过程 ?
就是一个依次从数据结构中拿出东西的过程

(1) 列表推导式:能够简洁的构造一个新列表

#一般情况写这样构造一个新列表\

li = []
for i in range(1,10):
    li.append(i)
print(li)               # 输出为:[1, 2, 3, 4, 5, 6, 7, 8, 9]

#列表推导式

li1 = [i for i in range(1,10)]
print(li1)              # 输出为:[1, 2, 3, 4, 5, 6, 7, 8, 9]

#升级篇 做出1-9之间的偶数 (当然也可以使用range(1,10,2)

li3 = [i for i in range(1,10) if i % 2 !=0]

print(li3)              # 输出为:[1, 3, 5, 7, 9]

#又升一级 如何打印出多个值呢

li4 = [(i,j) for i in range(1,5) for j in range(1,5)]
print(li4)              # 输出为: [(1, 1), (1, 2), (1, 3), (1, 4),
                                 # (2, 1), (2, 2), (2, 3), (2, 4),
                                 # (3, 1), (3, 2), (3, 3), (3, 4),
                                 # (4, 1), (4, 2), (4, 3), (4, 4)]

(2)集合推导式

li5 = {i for i in range(1,10)}
print(li5)				# 输出为:{1, 2, 3, 4, 5, 6, 7, 8, 9}

(3)字典推导式

li6 = {i:j for i in range(1,10) for j in range(1,10)}
print(li6)				# 输出为:{1: 9, 2: 9, 3: 9, 4: 9, 5: 9, 6: 9, 7: 9, 8: 9, 9: 9}

#小拓展:

li7 = {i:j for i,j in enumerate(['吴某','张某'])}
print(li7)				# 输出为:{0: '吴某', 1: '张某'}

注意:是没有元组推导式的!!!

小知识点:
(1)迭代
for 迭代变量 in 可迭代对象
#每一次循环都会自动让“迭代变量”指向“下一个元素”。
(2)可迭代对象指:
可迭代对象(实现了__iter__这个方法的都是):序列类型和散列类型
(3)迭代器指:
迭代器(实现了__iter__和__next__方法的就是,迭代器是一个对象) 只能前进不能后退。
(4)从可迭代对象生成一个迭代器
迭代器 = iter(可迭代对象)\ 下个值 = next(迭代器)

来个例子: 列表是一个可迭代对象,dir查看列表方法的时候里面有__iter__方法, 但列表不是一个迭代器,如何把列表转换为一个迭代器

li = [1,2,3,4]
it = iter(li)
########获取迭代器的值
 for i in it:
     print(i)			#这样会取到所有的值
########既然是迭代器了,就通过next方法去获取迭代器的值
#这样一次只取一个值,可以省内存空间。
# next两种使用方式
print(it.__next__())        # 输出为:1
print(next(it))             # 输出为:2

小拓展::: #for 实现原理

li = [1,2,3,4]
it = iter(li)
try:
    while True:
        print(next(it))
except Exception as e:
    print(e)
输出为:
1
2
3
4

如有错误或者言语不恰当的地方可在评论区指出
如转载此文请联系我征得本人同意,并标注出处及本博主名~