切片

语法:
  li.[x:y:z]
  li为list、tuple等数据类型,x为开始进行切片的位置,y为切片停止的位置(不包含y),z为xy切片后的结果里,每间隔z个元素输出一次结果。
  x默认为0时可以省略,y默认为0时可以省略,z默认为1时可以省略。如:
   >>> ['a','b','c','d','e','f'] [0:3]
   ['a', 'b', 'c']
   or
   >>> a =  ['a','b','c','d','e','f']
   >>> a[0:3]
   ['a', 'b', 'c']
   取前10个元素
    a[:10]
   取后10个元素
    a[-10:]
   取11~20个元素
    a[10:20]
   取前10个元素,每两个元素取一个(一共取5个)
    a[:10:2] 
   取全部元素(克隆一个)
    a[:]        #相当于从0取到最后,所以两个值都省略了 
  也支持倒数切片
      >>> a[-2:-1]
   ['e']

迭代

用for循环来遍历list、tuple、dict、str等可迭代对象,这种遍历称为迭代。


 除了list、tuple等有下标对象之外,dict这种没有下标的对象也可以进行迭代,默认情况下,dict迭代的是key,如需要迭代value,可以使用dict.value(),如果要同时迭代key和value,可以使用dict.items()。

 当使用for循环时,只要作用于一个可迭代对象,就可以正常运行,不用太关心该对象的类型。

列表生成式

将要生成的元素放到前面,后面跟for循环美酒可以轻松的创建出list了。
 语法:[列表条件 for x in ... ],如: [ x for x in range(1,200) ]

 

生成器generator(可迭代对象)

受内存和资源利用限制,当需要一个巨量元素的列表,或仅需要访问巨量列表中的几个元素的情况时,如果list的元素可以按照算法推算出来,那么就可以在循环的过程中不断推算出后面的元素,这样就不必创建完整的list,节省大部分空间,这种机制就是生成器。

创建生成器:

把一个列表生成式的[]改为() ,就创建了一个生成器。可以用next()函数获得该generator的下一个返回值。实际使用时,用for循环进行迭代。
  当推算算法比较复杂时,for循环可能无法实现算法,这时可以使用函数来实现算法。
  目前来讲,将函数中的输出行(如print()函数)替换为 yield 关键字就可以了。如果函数定义包含了yield关键字,这个函数就是一个generator。在函数执行时,遇到yield就会停中断,下次又会接着运继续执行。当执行满足条件后,则退出循环,当没有更多的yield可以执行时,再次调用next()就会抛出错误。因此在正常循环调用yield过程中,需要给循环设定条件来退出循环,不然会产生一个无限元素的数列出来。
  
  用for循环迭代generator函数时,拿不到return语句的返回值。需要捕获StopIteration错误,将返回值包含在StopIteration的vaule中。

 

迭代器

可以被next()函数不断返回下一个值的可迭代对象称为迭代器Iterator。
 可迭代对象不一定是迭代器,如:list、dict、str,把非迭代器的可迭代对象Iterable变成迭代器Iterator,可以使用iter()函数
 迭代器Iterator对象表示是一个惰性计算的序列,一个数据流。这个数据流可以看作为一个有序序列,但是却不能提前知道序列长度,只能不断通过next()函数来实现按需计算下一个数据。Iterator可以表示一个无限大的数据流,而list、tuple等类型对象永远不可能存储无限大的数据的,如全部自然数。
 for循环本质上就是不断调用next()函数来实现的。

Python 学习笔记 之 02 - 高级特性总结的更多相关文章

  1. Python学习札记(十五) 高级特性1 切片

    参考: 高级特性 切片 Note 1.掌握了Python的基础语法之后,就可以写出很多很有用的程序了,比如打印1-90的奇数: #!/usr/bin/env python3 L = [] n = 1 ...

  2. Python学习笔记:02数据类型

    Python 数据类型 python中标准的数据类型有 基础类型 整型(长整型) 浮点型 复数型 布尔型 序列类型 字符串 列表 元组 字典 整型 整型和长整型并不严格区分,整型int的表达范围和计算 ...

  3. Python学习笔记捌——面向对象高级编程

    __slots__特殊变量的使用: 由于Python是动态语言,允许先编写类,然后在创建实例的时候添加属性或者方法:而__slots__特殊变量就是,限制往类里添加属性的: 在创建类的时候,使用__s ...

  4. Python学习札记(十九) 高级特性5 迭代器

    参考:迭代器 Note 1.可用于for循环的对象有两类:(1)集合数据类型:list tuple dict str set (2)Generator:生成器和含yield语句的函数.这些可以直接作用 ...

  5. Python学习札记(十八) 高级特性4 生成器

    参考:生成器 Note 1.通过列表生成式,我们可以直接创建一个列表.但是,受到内存限制,列表容量肯定是有限的,且容易造成空间浪费.所以,如果列表元素可以按照某种算法推算出来,那我们可以在循环的过程中 ...

  6. Python学习札记(十六) 高级特性2 迭代

    参考:迭代 Note 1.如果给定一个list或tuple,我们可以通过for循环来遍历这个list或tuple,这种遍历我们称为迭代(Iteration). 在C.C++.Java等语言中,for循 ...

  7. python学习笔记回忆录02

    1.for循环 依次按顺序从列表中取出值,直到遍历完整个列表为止 the_count =[1,2,3,4,5] for number in the_count: print "this is ...

  8. Python学习笔记之生成器、迭代器和装饰器

    这篇文章主要介绍 Python 中几个常用的高级特性,用好这几个特性可以让自己的代码更加 Pythonnic 哦 1.生成器 什么是生成器呢?简单来说,在 Python 中一边循环一边计算的机制称为 ...

  9. OpenCV之Python学习笔记

    OpenCV之Python学习笔记 直都在用Python+OpenCV做一些算法的原型.本来想留下发布一些文章的,可是整理一下就有点无奈了,都是写零散不成系统的小片段.现在看 到一本国外的新书< ...

随机推荐

  1. Springboot 完整搭建快速入门,必看!

    前言 手把手教你Springboot微服务项目搭建快速入门,通过本文学习Springboot的搭建快速入门,掌握微服务大致的配置服务,后续将会继续将核心组件引入到项目中,欢迎关注,点赞,转发. Spr ...

  2. 背包问题(动态规划 C/C++)

    Description 卖方:这件商品14元 买方:给你20元 卖方:不好意思,我的零钱不够 买方:好吧,这是15元,剩的当小费 当到一个地方旅游时,如果你买东西的地方不支持信用,带零钱还是非常有用的 ...

  3. sort(hdu oj 1425)计数排序和快速排序

    Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0 < n,m < 1000000),第二行包含n个各不 ...

  4. Matlab项目经验分享-去除震荡点

    Matlab是做科研是比较常用的建模工具,我在研一做项目期间遇到了一个还算比较基础的问题,所以我打算记录下来并分享出来! 处理问题步骤: 1. 抛出问题 2. 思考解决方法 3. 代码验证看结果 抛出 ...

  5. ci爬坑

    1.row_array() 问题描述:没有数据返回NULL,直接foreach,报错

  6. 攻克solo第五课(Mixolydian 音阶)

    相对于独奏来说,我们已经说过了很多关于solo或独奏的乐理和技巧.那么这篇文章,笔者将使用guitar pro7软件来跟大家分享Mixolydian 音阶的演奏技巧,以及如何在学习Mixolydian ...

  7. 破解版的OCR文字识别软件,真的好用吗?

    很多小伙伴在下载OCR文字识别软件时,会习惯性去找破解版的软件.那么到底什么是破解版的软件呢?其实破解的软件,都是通过非法的手段,破除正版软件的安全权限制作而成的.因此,使用这些破解软件会存在很多安全 ...

  8. Python JSON存储数据

    前言: 很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据.不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭 程序时,你几乎总是要保存他们提供的信 ...

  9. AcWing 298. 围栏 (POJ1821)

    标签(空格分隔): dp 单调队列优化 题目描述 有N块木板从左到右排成一行,有M个工匠对这些木板进行粉刷,每块木板至多被粉刷一次. 第 i 个木匠要么不粉刷,要么粉刷包含木板 \(S_i\) 的,长 ...

  10. P6823 「EZEC-4」zrmpaul Loves Array

    发现进行一次排序后先前的操作都无效了,所以只需做最后一次排序后的操作.翻转操作打个翻转标记,互换操作根据翻转标记即可. 时间复杂度 \(O\left(n+m\right)\). code: #incl ...