Python学习笔记:迭代器

迭代器

只要是可迭代的对象,无论有没有下标,都是可以迭代的

# 迭代字符串
for x in 'hello world!':
    print(x)
h
e
l
l
o
 
w
o
r
l
d
!
# 迭代list
sum = 0
for x in [1,3,4,6,7,8]:
    sum+=x
print(sum)
29
# 迭代字典
dict = {'图书馆':3,'机场':11,'教研室':23}
for key in dict:
    print('key is : {}, value is {}'.format(key,dict[key]))
key is : 图书馆, value is 3
key is : 机场, value is 11
key is : 教研室, value is 23

列表生成式

list1 = list(range(1,10))
list1
[1, 2, 3, 4, 5, 6, 7, 8, 9]

列表生成式的语法:

[expr for iter_var in iterable]
[expr for iter_var in iterable if cond_expr]

# 生成一个n^2的列表
list1 = [x * x for x in range(1,10)]
list1
[1, 4, 9, 16, 25, 36, 49, 64, 81]

我们可以添加条件限制,只收集偶数的二次方

list1 = [x * x for x in range(1,10) if x %2 ==0]
list1
[4, 16, 36, 64]

同时变量也可以变为两个或者以上

list1 = [(x*y,x/y) for x in range(1,5) for y in range(3,7)]
list1
[(3, 0.3333333333333333),
 (4, 0.25),
 (5, 0.2),
 (6, 0.16666666666666666),
 (6, 0.6666666666666666),
 (8, 0.5),
 (10, 0.4),
 (12, 0.3333333333333333),
 (9, 1.0),
 (12, 0.75),
 (15, 0.6),
 (18, 0.5),
 (12, 1.3333333333333333),
 (16, 1.0),
 (20, 0.8),
 (24, 0.6666666666666666)]

生成器

我们利用之前的生成式,可以创建出符合某种规律的列表,但是,假如我们创建一个非常大的列表,而只需要前几个和后几个的值,那么我们就会造成空间浪费。为了避免这种浪费,我们可以在需要用到的时候再把对象创建出来,这种方法就叫生成器

生成器的创建

创建一个列表生成器的简单方法是把列表生成式的[]换成()

g1 = (x * x for x in range(1,10))
g1
<generator object <genexpr> at 0x7fb28bbfe660>

生成器并不真正创建数字列表, 而是返回一个生成器,这个生成器在每次计算出一个条目后,把这个条目“产生” ( yield ) 出来

遍历生成器

# 方法1:直接使用for循环
for x in g1:
    print(x)
1
4
9
16
25
36
49
64
81
# 方法2:使用next()函数
g1 = (x * x for x in range(1,10))
next(g1)
1
next(g1)
4

使用函数的方法创建生成器

#普通产生列表的函数
def my_function():
    for i in range(1,10):
        print(i*i)
my_function()
1
4
9
16
25
36
49
64
81

我们把函数里面的print替换成yield,就可以变成一个生成生成器的函数

#普通产生列表的函数
def my_function():
    for i in range(1,10):
        yield i*i
g1 = my_function()
next(g1)
1
next(g1)
4

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值