Python 迭代器和列表解析
Python 迭代器和列表解析
1)迭代器
一种特殊的数据结构,以对象形式存在
>>> i1 = l1.__iter__()
>>> i1 = iter(l1)
可迭代对象:
序列: list、str、tuple
非序列: dict、file
自定义类: __iter__()、 __getitem__()
注意:
若要实现迭代器,需要在类中定义next()方法
要使迭代器指向下一个对象,则使用成员函数 next()
i1.next()
当没有元素时,会引发StopIteration异常
for循环可用于任何可迭代对象
例: >>> l1 = ['Sun','Mon','Tue','Wed','Thu','Fri','Sat']
>>> i1 = l1.__iter__()
>>> il.next()
'Sun'
>>> il.next()
'Mon'
2)列表解析 [ ]
根据已有列表,高效生产新列表的方式。 常用于实现创建新的列表,因此要放置于 [ ] 中
语法:
[ expression for iter_var in iterable ]
[ expression for iter_var in iterable if cond_expr ]
os模块中 listdir() 能够列出所有文件
例:事先定义l1 l2 l1 = [ 1,2,3,4,5 ] l2=[ ]
>>> for i in l1:
l2.append(i**2) l2列表内各项为l1的平方
>>> print l2
[1, 4, 9, 16, 25]
>>> l3 = [ i**2 for i in l1 ] l3列表内各项为l1的平方
[1, 4, 9, 16, 25]
>>> l4 = [ i**2 for i in l1 if i>=3 ] l3列表内各项为l1中 >= 3的平方
[9, 16, 25]
例题: l1 = ['x','y','z'] l2 = [1,2,3] 应用列表解析方法使其各项相乘
>>> l3 = [ (i,j) for i in l1 for j in l2 ] for循环内部嵌套一个for循环实现各项乘
[('x', 1), ('x', 2), ('x', 3), ('y', 1), ('y', 2), ('y', 3), ('z', 1), ('z', 2), ('z', 3)]
3)生成器 ( )
惰性计算、延迟求值
生成器表达式并不真正创建数字列表,而是返回一个生成器对象,此对象在每次计算出一个条目后,把这个条目产生出来(一次返回一个值)
语法:
( expr for iter_var in iterable )
( expr for iter_var in iterable if cond_expr )
例: >>> l1 = ( i**2 for i in range(2,11,2))
>>> l1.next()
2
>>> l1 = ( i**2 for i in range(2,11) if i%2==0 )
>>> l1.next()
2
注意:
序列过长,并且每次只获取一个元素时,应当考虑使用生成器表达式而不是列表解析
列表解析与生成器的关系相当于range()与xrange()
4)产生偏移和元素
enumerate
同时偏移缩印和偏移元素,使用enumerate()函数
此内置函数返回一个生成器对象
>>> S = 'Hello,world'
>>> a = enumerate(S)
>>> a.next()
(0,'H')
>>> a.next()
(1,'e')
Python 迭代器和列表解析的更多相关文章
- 3、Python迭代器、列表解析及生成器(0530)
1.动态语言 sys.getrefcount() //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...
- Python(五)之迭代器和列表解析
Python迭代器和列表解析 迭代器 例如: In [1]: l1 = [1,2,3,4,5] dir(i1)可以看到内置方法'__iter__' 生成一个迭代器: l1.__iter__,或i2 = ...
- Python 迭代器之列表解析与生成器
 [TOC] 1. 列表解析 1.1 列表解析基础 列表解析把任意一个表达式应用到一个迭代对象中的元素 Python内置ord函数会返回一个字符的ASCII整数编码(chr函数是它的逆过程, 它将A ...
- julia与python中的列表解析.jl
julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...
- Python中的列表解析和生成器表达式
Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...
- Python自动化运维之7、生成器、迭代器、列表解析、迭代器表达式
迭代器和生成器 1.迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外 ...
- python学习-迭代器,列表解析和列表生成式
迭代器为类序列对象提供了一个类序列的接口.Python 的迭代无缝的支持序列对象,而且还允许程序猿迭代非序列类型,包括用户定义的对象. 迭代器是一个next()方法的对象,而不是通过索引计数.当需要下 ...
- Python 迭代器之列表解析
 [TOC] 尽管while和for循环能够执行大多数重复性任务, 但是由于序列的迭代需求如此常见和广泛, 以至于Python提供了额外的工具以使其更简单和高效. 迭代器在Python中是以C语言的 ...
- python 中的列表解析和生成表达式 - 转
优雅.清晰和务实都是python的核心价值观,如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析( List comprehensions)和生成表达式,通过这两 ...
随机推荐
- HourRank 19
https://www.hackerrank.com/contests/hourrank-19/challenges 第一题略. 第二题是nim博弈,问删掉一个区间的石子,使得先手败的方案有几种,明显 ...
- 底层算法系列:Paxos算法
关于算法,面太广.本系列只研究实际应用中遇到的核心算法.了解这些算法和应用,对java码农进阶是很有必要的. 对于Paxos学习论证过程中,证实一句话:有史以来学习paxos最好的地方wiki:Pax ...
- 简易数据加密传输电路(VHDL)(原创)
LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.std_logic_unsigned.ALL; ENTITY KEKE IS --定义实体wsj ...
- 二识angularJS
前言:记得三月份时下定决心说每天要更新一篇博客,学习点新东西,实践下来发现太不现实,生活中的事情很多,再喜欢也不能让它一件占据生活的全部吧,所以呢,以后顺其自然吧.之前有一篇'初识angular'因为 ...
- git底层原理(一)
1.git仓库的初始化: 输入git init指令,会看到在当前空目录下创建了一个.git隐藏文件夹,这个就是git实现一切版本管理的关键.进入到.git目录下,里面包含三个文件(config/des ...
- 游戏UI框架设计(五): 配置管理与应用
游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...
- 从零开始理解JAVA事件处理机制(1)
“事件”这个词已经被滥用了.正因为“事件”的被滥用,很多人在用到事件的时候不求甚解,依样画葫芦,导致学习工作了很多年,还是不清楚什么是事件处理器.什么是事件持有者.所以,如果你对于Event这个词还是 ...
- 有趣而又被忽略的Unity技巧
0x00 前言 本文的内容主要来自YouTube播主Brackeys的视频TOP 10 UNITY TIPS 和TOP 10 UNITY TIPS #2.在此基础上经过自己的实践和筛选之后,选择了几个 ...
- Coursera 机器学习笔记(八)
主要为第十周内容:大规模机器学习.案例.总结 (一)随机梯度下降法 如果有一个大规模的训练集,普通的批量梯度下降法需要计算整个训练集的误差的平方和,如果学习方法需要迭代20次,这已经是非常大的计算代价 ...
- java音视频编解码问题:16/24/32位位音频byte[]转换为小端序short[],int[],以byte[]转short[]为例
前言:Java默认采用大端序存储方式,实际编码的音频数据是小端序,如果处理单8bit的音频当然不需要做转换,但是如果是16bit或者以上的就需要处理成小端序字节顺序. 注:大.小端序指的是字节的存储顺 ...