python学习之高级特性:
切片:对列表、元组、字符串、字典取中间的一部分,在C中一般是通过for循环拷贝/memcpy/strcat等操作。而python提供了更方便的切片操作符[m:n]:前闭后开,如果从0取m可以省略;如果只用[:]就是切整片;也可以从尾端切片[-m:]:前后的闭区间。
列表生成式:List(range(m,n)):构造一个大于等于m小于n的列表;对于想生成复杂的列表要用列表生成式:[生成对象的模型, for 变量 in 可迭代的对象 附加条件表达式]
(1*1,2*2.。。且能被2整除的列表)方法有:最简单的方法:[x * x for x in range(1, 11) if x % 2 == 0 ] 或者
>>> L = []
>>> for x in range(1, 11):
if(if x % 2 == 0 ):
L.append(x )
其它复杂的生成式举例:
使用两个变量来生成 list:
>>> d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> [k + '=' + v for k, v in d.items()]
['y=B', 'x=A', 'z=C']
把一个 list 中所有的字符串变成小写:
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
迭代:对列表、元组、字符串、字典、生成器的遍历称为迭代,对任何可迭代的对象都可以用for循环:关于字典的迭代需要注意的是:默认是对键的迭代,如果要对值切片要用.value()的方法;要对键 和值同时迭代需要用到.item()的方 法:for k, v in d.items(): print(k,':',v) #‘:’是添加的连接符。
problem1: 如何判断一个对象是可迭代对象呢?方法是通过 collections 模块的 Iterable 类型判断:
>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str 是否可迭代
problem2:如何对List的下标和元素同时迭代:答案是利用Python 内置的 enumerate 函数可以把一个 list 变成索引-元素对,这样就可以在 for 循环中同时迭代索引和元素本身:
>>> for i, value in enumerate(['A', 'B', 'C']):
... print(i, value)
...
0 A
1 B
2 C
生成器:产生背景:List可以产生大量的列表元素,但比较占存储空间,为了能推算后续结果又不想生成列表那么就可以用生成器了genarator
创建方法:方法一:将列表生成式的【】改成?();方法2 :用函数的方法+yied关键字
特点:1 当输入生成器不输出结果数据而只是说明生成器 2可以用next(生成器)递推出下一个结果直到StopIteration 错误或者for循环输出所有避免(StopIteration 错误);3函数式生成器每遇到yield就产生中断(关键字yield也称为一般函数和函数式生成 器的最基本区别,还有2点:调用后生成器不输出结果值,可以用next()函数)
迭代器:可表示无限大的数据流。能用for循环的对象都是可Iterable 迭代的(isinstance(对象, Iterable) 来判断),但不一定是迭代器Iterator (是否可next(迭代器对象),或用isinstance(对象, Iterator) 来判断是否是迭代器)判断是否是迭代器,通过iter(可迭代对象)将可迭代但不是迭代器 的转变为迭代器。
最新文章
- mysql在空闲8小时之后会断开连接(默认情况)
- 【原创】开源Math.NET基础数学类库使用(03)C#解析Matlab的mat格式
- EntityFramework 7 Linq Contains In 奇怪问题(已修复)
- SQL Server 表变量和临时表的区别
- 制作Html标签以及表单、表格内容
- java实现将汉字转为拼音
- [CareerCup] 11.2 Sort Anagrams Array 异位词数组排序
- java socket 发送文件
- 集合框架,ArrayList和Vector的区别,让arrayList线程安全的几种方案
- git 删除分支和删除文件夹
- org.apache.subversion.javahl.ClientException: svn: E155021: This client is too old to work with the
- 【linux】常用命令集锦&;持续更新...
- 【设计经验】3、ISE中烧录QSPI Flash以及配置mcs文件的加载速度与传输位宽
- 在MVC过滤器中获取触发的Controller、Action、参数 等
- Java基础-StringBuffer类与StringBuilder类简介
- GreenOpenPaint的实现(四)放大缩小处理滚动事件
- 面试和工作中的map
- 升级struts到2.5.2遇到的问题及解决方案
- Python全栈day14(集合)
- CMakeFile命令之file
热门文章
- 查询oracle数据库中的for update 中锁住的table表sql语句
- Android加载/处理超大图片神器!SubsamplingScaleImageView(subsampling-scale-image-view)【系列1】
- typeof详解
- Service的两种启动方式
- bzoj2957楼房重建——线段树
- kafka数据可靠性深度解读【转】
- 宿主机 &;&; docker 常用命令
- 回味经典——uboot1.1.6 之 第一阶段
- Sense2vec with spaCy and Gensim
- JS获取元素的offsetTop,offsetLeft等相关属性