【python基础】 高级特性

本章包含:迭代、列表生成式、生成器、迭代器
参考:廖雪峰python

迭代

迭代list和tuple和string

for .. in ..

迭代字典

  1. 默认迭代对象为 keys
    for i in dic
# 迭代字典
dic = {'a':12, 'b':13, 'c':14}
for i in dic:
    print(i)
  1. 迭代values
    for i in dic.values()
dic = {'a':12, 'b':13, 'c':14}
for i in dic.values():
    print(i)
  1. 迭代keys和values
    for i in dic.items -> (keys,values)
dic = {'a':12, 'b':13, 'c':14}

for i in dic.items():
    print(i)
    print(i[0])

判断是否可迭代

from collections.abc import Iterable 引入 Iterable
isinstance(object, Iterable) 返回True或者False
在这里插入图片描述

索引-元素对

enumerate( iter) 变成索引-元素对
在这里插入图片描述

列表生成式

list生成列表

list(range(1,11)

 l = list(range(1,11))
 print(l)

#[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

列表生成式

  1. [x * x for x in range(1,11)]
l = [x*x for x in range(1,11)]
print(l)
  1. 添加if 筛选元素
    [x * x for x in range(1,11) if x % 2 == 0]
l = [x*x for x in range(1,11) if x % 2==0]
print(l)

#[4, 16, 36, 64, 100]
  1. 多层循环
    [m + n for m in 'abc' for n in 'efg']
l = [m + n for m in 'abc' for n in 'efg']
print(l)

#['ae', 'af', 'ag', 'be', 'bf', 'bg', 'ce', 'cf', 'cg']
  1. 两个变量
    [k + ' = '+ v for k, v in dic.items()]
dic = {'a':'12', 'b':'13', 'c':'14'}
l = [k + ' = '+ v for k, v in dic.items()]
print(l)

#['a = 12', 'b = 13', 'c = 14']

关于if 和 else

l = [x for x in range(1,11) if x % 2 ==0]
p = [x if x % 2 ==0 else 0 for x in range(1,11) ]
一个iffor之后,此时if表示筛选条件,
一个if…elsefor之前,此时for才是筛选条件。

生成器

为什么使用生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

用() 生成生成器

(x for x in range(10))
在这里插入图片描述

访问元素

  1. next(generator)
    在这里插入图片描述
  2. for方法(生成器是可迭代对象)
    在这里插入图片描述
  3. yield
    yield 关键字就是将函数变成generator函数,每次调用next都会在yield语句之后停止

在这里插入图片描述

StopIteration

迭代完之后会抛出 StopIteration 错误

迭代器

声明

可以直接使用for的几种数据类型:

  1. list , tuple , dict, set, str 等
  2. 生成器

可以用for迭代的对象统称: Iterable
isinstance判断是否是Iterable

可以被next调用并返回下一个值得对象统称: Iterator
isinstance判断是否是Iterator

只有生成器函数是Iterator其他都不是
iter()将Iterable 转换为 Iterator

为什么Iterable不是Iterator

这是因为Python的Iterator对象表示的是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据时抛出StopIteration错误。可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,所以Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。
Iterator甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值