Python学习6

1.迭代

  • 1.1 collections
  • 1.2 enumerate
python 复制代码
# 1.1 collections
# for循环只能作用在可迭代对象
# 可以用collections来进行判断
from collections import Iterable
# 字符串是否可迭代
isinstance('abc',Iterable)
>>> True
python 复制代码
# list是否可迭代
isinstance([1,2,3],Iterable)
>>> True
python 复制代码
# 整数是否可迭代
isinstance(123,Iterable)
>>> False
python 复制代码
# 1.2 enumerate
# 对list进行索引
for i , value in enumerate(['a','b','c']):
    print(i,value)

>>> 0 a
>>> 1 b
>>> 2 c

2.列表生成式

python 复制代码
list(range(1,11))
>>> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
python 复制代码
[x * x for x in range(1,11)]
>>> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
python 复制代码
[m + n for m in 'abc' for n in 'xyz']
>>> ['ax', 'ay', 'az', 'bx', 'by', 'bz', 'cx', 'cy', 'cz']
python 复制代码
d = {'x':'a','y':'b','z':'c'}
[k + '=' + v for k,v in d.items()]
>>> ['x=a', 'y=b', 'z=c']

3.生成器

  • 3.1 简单写法
  • 3.2 next
  • 3.3 yield
python 复制代码
# 如果列表里的元素可以推理出来,从而不用创建完整的list,从而节省空间,称为generator
# 3.1 最简单就是把[]改成()
L = [x * x for x in range(10)]
L
>>> [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
python 复制代码
# generator
g = (x * x for x in range(10))
g
>>><generator object <genexpr> at 0x10c4619a8>
python 复制代码
# 3.2 next
# generator 保存的是算法 每次用next()调用计算下一个值
next(g)
>>> 0
next(g)
>>> 1
next(g)
>>> 4
python 复制代码
# generator 是可以迭代的 所以可以用for
g = (x * x for x in range(5))
for n in g:
    print(n)

>>> 0
>>> 1
>>> 4
>>> 9
>>> 16
python 复制代码
# 3.3 yield
# 用yield关键字生成generator
def odd():
    print('step 1')
    yield 1
    print('step 2')
    yield 3
    print('step 3')
    yield 5
o = odd()
next(o)
>>> step 1
>>> 1
next(o)
>>> step 2
>>> 3
next(o)
>>> step 3
>>> 5

4.迭代器

  • 4.1 Iterable
  • 4.2 Iterator
  • Iterator对象表示是一个数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,直到没有数据的时候抛出StopIteration错误,我们事前不知道他的长度,只有不断调用next()计算它的下一个数据,所以Iterator的计算是惰性的,甚至可以是无限大的长度,但是list却一定是有限的长度。
python 复制代码
# 4.1 Iterable
# 可迭代对象可以直接作用在for循环
# 一类是集合数据类型,如list,tuple,dict,set,str
# 另一类是generator
# isinstance()判断对象是否Iterable
from collections import Iterable
# list是否可迭代
isinstance([],Iterable)
>>> True
# dict是否可迭代
isinstance({},Iterable)
>>> True
# str是否可迭代
isinstance('a',Iterable)
>>> True
# generator是否可迭代
isinstance((x for x in range(10)),Iterable)
>>> True
# 数字是否可迭代
isinstance(123,Iterable)
>>> False
python 复制代码
# 4.2 Iterable和Iterator
# 可以被next()调用的才是Iterator(迭代器)
# 生成器都是Iterator
# list/dict虽然Iterable,但不是Iterator
from collections import Iterator
isinstance((x for x in range(10)),Iterator)
>>> True
isinstance([],Iterator)
>>> False
python 复制代码
# list/dict/str等Iterable,可以iter()函数变成Iterator
isinstance(iter([]),Iterator)
>>> True
isinstance(iter('abc'),Iterator)
>>> True
相关推荐
liliangcsdn5 分钟前
LLM如何与mcp server交互示例
linux·开发语言·python
Lupino7 分钟前
拯救迷失的荧光溶解氧传感器:从“三无”到“复活”的全记录
python
摇滚侠9 分钟前
Windows 查看占用端口的进程,并关闭进程
windows
汤姆yu13 分钟前
Windows系统下TRAE的安装与完整使用教程
windows·ai·trae·ai编程工具
南境十里·墨染春水14 分钟前
linux学习进展 进程的内存管理
linux·服务器·学习
小陈phd19 分钟前
多模态大模型学习笔记(三十四)——ChatTTS:新一代中文语音合成工具原理与实战解析
笔记·学习·语音识别
xcjbqd022 分钟前
SQL中视图能否嵌套存储过程_实现复杂自动化报表逻辑
jvm·数据库·python
ZC跨境爬虫23 分钟前
海南大学交友平台开发实战day7(实现核心匹配算法+解决JSON请求报错问题)
前端·python·算法·html·json
迷藏49425 分钟前
**发散创新:基于角色与属性的混合权限模型在微服务架构中的实战落地**在现代分布式系统中,
java·python·微服务·云原生·架构
一个人旅程~32 分钟前
在M系列的macbook上如何使用VMware安装ARM版的Win11以及注意哪些问题?
linux·windows·经验分享·macos·电脑