Python可迭代跟迭代器的区别

想必大家都学过zip()高级函数吧,zip()即可以将两个可以迭代的对象合在一起, 请看如下代码:

    l1 = [1, 2, 3, 4]
    l2 = [11, 22, 33, 44]
    l = zip(l1, l2)
    for i in l:
        print(i)
    l3 = [i for i in l]
    print(l3)

输出:

(1, 11)
(2, 22)
(3, 33)
(4, 44)
[]

为什么l3输出为[]呢,这是因为zip()函数的返回结果为一个迭代器,根据迭代器的意义可知,在for循环的时候,已经将l中的数据取出来了,所以到for结束时了l已经是一个空列表了,之后再用列表生成,因为l是空的,所以l3也是空的,故输出[]。

当我们查可迭代对象时,会发现list,tuple等都是可迭代的,然后看如下代码:

l1 = (1, 2, 3)
for i in l1:
    print(i)
l2 = [i for i in l1]
print(l2)

输出:

1
2
3
[1, 2, 3]

为什么list就可以输出呢,这就是我要讲的区别:可迭代跟迭代器不是一个概念,迭代器是可迭代的,但不可以说可迭代的都是迭代器,就像牛肉是可以吃的,但是可以吃的比一定是牛肉,第一个取没了的是迭代器,对于可迭代的比如list没有这个说法。

猜你喜欢

转载自blog.csdn.net/weixin_42739047/article/details/83719061
今日推荐