python高级特性

1行代码能实现的功能,决不写5行代码。请始终牢记,代码越少,开发效率越高。

  • 切片

    当我们要取一个list中的前n各元素时,如果前n个少的话,我们还可以一个一个的取,但是若前n个元素极其多的话,我们就要采取其他办法:

      L = [];
    n = 1;
    while n <= 99:
    L.append(n);
    n = n + 2; print(L); #取前三个元素
    r = [];
    a = 3;
    for i in range(a):
    r.append(L[i]); print(r);

对这种经常指定索引范围的操作,用循环会十分繁琐,所以python提供了切片(slice)操作符,取前三个元素一行代码就可以完成:

	#一行代码完成取前三个元素
print(L[0:3]);

表示从0开始取,直到3结束,不包括索引3。类似的。L[-1],就指倒数第一个元素

  • 迭代

    如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代。

      #迭代dict(相当于map)
    d = {"a": 1, "b": 2, "c": 3};
    for key in d:
    print(key);
    #a b c
    #迭代value
    for value in d.values():
    print(value);
    #1 2 3

注意:如果要对list实现类似于Java那样的下标循环,我们可以使用python内置的enumerate函数实现索引-元素对。

	#用enumerate函数实现list变成索引-元素对
for i, value in enumerate(["a", "b", "c"]):
print(i, value);
# 0 a
# 1 b
# 2 c;
  • 列表生成式

    即list comprehensions,是用来创建list的生成式,生成1~10d的list可以用list(range[1, 11])

      #用列表生成式创建list
    print(list(range(1, 11)));

生成[11,22, 33, ... ,1010]

	L1 = [];
for x in range(1, 11):
L1.append(x*x);
print(L1);
#[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
#使用列表生成式
print([x*x for x in range(1, 11)]);

for循环后面还可以加上if判断语句:

	L2 = [x * x for x in range(1, 11) if x % 2 == 0];
print(L2);#[4, 16, 36, 64, 100]

等等这样的生成操作,可以根据自己的情况来进行生成。

  • 生成器

    是一种一边循环一遍计算的机制(也是一个函数):generator (我没记错的话,es6中也有这个生成器,但是功能还有有区别)

    创建一个generator,方式:
  1. 将列表生成器的[ ]改成( ),就创建了一个generator:

     	#用()创建一个generator
    L3 = (x*x for x in range(10))
    print(L3);
    #<generator object <genexpr> at 0x00000276D57E8A40>

可以通过next()来一个个打印generator的返回值,也可以用循环:

		L3 = (x*x for x in range(10));
for i in L3:
print(i);
  1. 带yield的generator function

    斐波拉契数列打印:

     	#普通函数编写的费比拉数列
    def fib(max):
    n, a, b = 0, 0, 1;
    while n < max:
    print(b);
    a, b = b, a + b;
    n = n + 1;
    return 'done';
    print(fib(6));
    # 1
    # 1
    # 2
    # 3
    # 5
    # 8
    # done
    #用generator函数只需要把print(b)变成yield b即可 def fib1(max):
    n, a, b = 0, 0, 1
    while n < max:
    yield b
    a, b = b, a + b
    n = n + 1
    return 'done'
    print(fib1(6));
    #<generator object fib at 0x104feaaa0>

generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。在执行过程中,遇到yield就中断,下次又继续执行

3. 杨辉三角

		#杨辉三角
def triangles():
N = [1]
while True:
yield N
N.append(0)
N = [N[i]+N[i-1] for i in range(len(N))] n1 = 0
results = []
for t in triangles():
print(t)
results.append(t)
n1 = n1 + 1
if n1 == 10:
break
  1. 总结

    generator是非常强大的工具,在Python中,可以简单地把列表生成式改成generator,也可以通过函数实现复杂逻辑的generator。

    要理解generator的工作原理,它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束。

    区分普通函数和generator函数,普通函数调用直接返回结果,generator函数的“调用”实际返回一个generator对象
  • 迭代器

    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator(很像es6的Iterator接口)

    凡是可作用于for循环的对象都是Iterable类型;

    凡是可作用于next()函数的对象都是Iterator类型,它们表示一个惰性计算的序列;

    集合数据类型如list、dict、str等是Iterable但不是Iterator,不过可以通过iter()函数获得一个Iterator对象。

  • 总结

    以上都是python非常强大的特性,他们灵活的运用在python处理list、tuple等数据组上,自己学习的很浅,还是需要进行不断地练习及接触更多的关于python的demo。

python切片、迭代、生成器、列表生成式等高级特性学习的更多相关文章

  1. python的高级特性:切片,迭代,列表生成式,生成器,迭代器

    python的高级特性:切片,迭代,列表生成式,生成器,迭代器 #演示切片 k="abcdefghijklmnopqrstuvwxyz" #取前5个元素 k[0:5] k[:5] ...

  2. Python的高级特性之切片、迭代、列表生成式、生成器

    切片 切片就是获取一个list.tuple.字符串等的部分元素 l = range(100) #取[0,5)元素 print(l[:5]) #[0, 1, 2, 3, 4] #在[0,99]中每隔10 ...

  3. python迭代、列表生成式

    迭代: 迭代对象(Iterable),可以直接作用于for循环的对象,如list / tuple / dict / set / str /等集合数据类型可以直接作用于for循环 >>> ...

  4. 初学Python(十)——列表生成式

    初学Python(十)--列表生成式 初学Python,主要整理一些学习到的知识点,这次是列表生成式. # -*- coding:utf-8 -*- ''''' 列表生成式 ''' #一行代码表达所有 ...

  5. Python高级特性(切片,迭代,列表生成式,生成器,迭代器)

    掌握了Python的数据类型.语句和函数,基本上就可以编写出很多有用的程序了. 比如构造一个1, 3, 5, 7, ..., 99的列表,可以通过循环实现: L = [] n = 1 while n ...

  6. Python —— 函数高级特性(切片、迭代、列表生成式、生成器、迭代器)

    一.切片(Slice) 在很多编程语言中,针对字符串提供了很多截取函数(i.e.  substring),目的就是对字符串切片.python中没有针对字符串的截取函数,需要通过“切片”来完成. 取一个 ...

  7. Python 高级特性:切片、迭代、列表生成式、生成器

    切片(发现了一些新操作) 参考链接:https://www.liaoxuefeng.com/wiki/1016959663602400/1017269965565856 间隔取元素(可以取负数,负数就 ...

  8. Python基础笔记:高级特性:切片、迭代、列表生成式、生成器、迭代器

    题记: 在python中,代码不是越多越好,而是越少越好.代码不是越复杂越好,而是越简单越好. 1行代码能实现的功能,绝不写5行代码. 请始终牢记:代码越少,开发效率越高. 切片 >>&g ...

  9. Python编程核心内容之二——切片、迭代和列表生成式

    Python版本:3.6.2  操作系统:Windows  作者:SmallWZQ 最近太忙啦.很多事情需要自己处理,感觉时间不够用啊~~~~今后,博客更新时间可能会慢下来,哈哈,正所谓"人 ...

随机推荐

  1. LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]

    最近做一个负载均衡项目的性能测试,使用LR录制脚本协议为https协议,回放脚本时出现报错: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX& ...

  2. Hash表的C++实现(转)

    原文:Hash表(C++实现) 哈希表的几个概念: 映像:由哈希函数得到的哈希表是一个映像. 冲突:如果两个关键字的哈希函数值相等,这种现象称为冲突. 处理冲突的几个方法: 1.开放地址法:用开放地址 ...

  3. myBatis 课纲

    myBatis 课纲 第一章 MyBatis 架构.主要构件及相互关系 使用 MyBatis 构建项目 基本的增删改查映射文件方式(特殊符号处理),使用接口方式实现 结果集映射: 单个对象映射到Has ...

  4. 教你管理SQL实例系列(1-15)

    全系列转自:51CTO ->jimshu http://jimshu.blog.51cto.com 目录及原本连接如下: 教你管理SQL实例(1)数据库实例 教你管理SQL实例(2)服务启动帐户 ...

  5. JAVA学习笔记----【转】 java.toString() ,(String),String.valueOf的区别

    在java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能.本文将对常用的转换方法进行一个总结. 常用的方法有Object#toString(),(String)要转换的对象,S ...

  6. [不常用] - CSRF(跨站点请求伪造)

    CSRF,Cross Site Request Forgery,即跨站点请求伪造.   这种攻击是指,在用户正常登录系统以后,攻击者诱使用户访问一些非法链接,以执行一些非法操作. 比如:如果删除用户操 ...

  7. selection createTextRange setSelectionRange

    http://www.cnblogs.com/rainman/archive/2011/02/27/1966482.html http://www.zhangxinxu.com/wordpress/2 ...

  8. Django 进阶篇之 Form验证

    Django Form验证 在实际的生产环境中比如登录和验证的时候,我们一般都使用Jquery+ajax来判断用户的输入是否为空,假如JS被禁用的话,咱们这个认证屏障是不是就消失了呢?(虽然一般不会禁 ...

  9. Keepalived + LVS/DR 安装配置

    Keepalived + LVS/DR 说明 Keepalived:可以踢出掉故障服务 Keepalived:可以实现主从切换,解决单点故障 实验环境 四台主机:Linux Centos 6.4 32 ...

  10. 主攻ASP.NET MVC4.0之重生:MVC Controller修改Controller.tt模版,自动添加版本注释信息

    第一步找到MVC 4.0 CodeTemplates 一般路径在:C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\Ite ...