2018年8月23日python中列表的高级操作:列表推导式,列表生成器,列表迭代器

列表在我们平常的编程中经常会用到,多用于临时存储一些程序需要的数据, 向列表中添加数据时,有多种方式: 1.数据少的话直接定义列表中的数据 my1 = [0, 1, 2, 3, 4, 5] 2.当数据稍微多点的话可以用for循环的方式向列表中添加数据,但是操作比较繁琐     my2 = list() for i in range(100):          my2.append(i)

列表推导式:

3.pythong提供了列表的快速生成方式,可以通过“推导式”向列表中添加大量的数据 #优点:语法简单,可以通过包含逻辑条件生成一个符合条件的列表 # 缺点:逻辑过于简单!不能生成条件更加复杂的更加准确的列表

复杂的逻辑交给函数,简单的逻辑交给列表推导式 1>最基本的推导式:  my3 = [x for x in range(0,20)] print(my3) #第二个x是循环遍历范围内的所有数据,第一个x完成所有数据的存储

2>附带条件的列表推导式,选择偶数存储 my4 = [x for x in range(0, 20) if x % 2 == 0] print(my4)

3>附带运算的列表推导式,x的平方组成一个列表 my5 = [x**2  for x in range(0, 10)] print(my5)

4>附带多项数据的列表推导式 X:0 1 2 3 4 5 Y:0 1 X+y: 0+0 0+1 1+0 1+1 my6 = [x + y for x in range(0, 5) for y in range(0, 2)] print(my6)

列表生成器:

4.当列表中存储大量数据的时候,会严重地消耗解释器的内存,所以为了节省解释器 内存,出现了列表生成器,当有大量无规则的数据的时候不要存储在列表中,当有大量 有规则的数据需要存储在列表中的时候可以使用列表生成器,首先看一下列表生成器和 列表推导式的区别: 列表推导式: my_list = [x for x in range(0, 100)]                 print(my_list) 列表生成器: my_generator = (x for x in range(0, 100))          print(my_generator) 列表推导式是直接生成了列表中的所有的数据,而列表生成器是创建了一个生成器对象, 对象中包含了生成需要的数据的算法,当需要数据的时候触发算法才生成数据,而不是直接把 所有的数据一下子创建完,生成器对象中存储的只是一个产生数据的算法 如何使用生成器中的数据: 1>通过系统内建函数next()获取生成器中下一个数据 print(next(my_generator))  #0 print(next(my_generator))  #1 2>通过类型的__next__()魔法方法,直接获取下一个数据 print(my_generator.__next__()) #2 print(my_generator.__next__()) #3

列表的生成器是用来产生列表内的数据的,迭代器是用来判断一个对象是否可以被for循环遍历 所以列表生成器和迭代器是没有关系的!列表生成器只能用在列表中,迭代器可以判断很多 类型的数据。

列表迭代器: python在collections集合模块中提供了迭代器对象 列表的迭代器包含两部分内容: 1是迭代对象:collections.Iterable    (可循环遍历的对象) 2是迭代标识:collections.Iterator    (记录迭代状态的,主要是记录迭代到哪了) 判断一个对象能否被for循环遍历首先要判断它是不是迭代对象,用isinstance判断一个对象是不是某种类型: s = "hello" isinstance(s, collections.Iterable) 如果返回为True的话说明该对象可以用for循环遍历,否则说明该对象不能被for循环遍历

字符是迭代对象可以用for循环遍历,int整型不是迭代对象,不能用for循环遍历

如果是一个自定义对象,比如说类型,怎么让该类型的对象也能被for循环遍历? 需要在该类型中重写__iter__方法 class Person():     def __init__(self, fav):         self.fav = fav     def __iter__(self):         print("获取迭代对象的函数被执行了")         return iter(self.fav) p = Person(["王者荣耀", “扫雷”,“消消乐”]) for x in p:      print(x)

思考题: 1. list/set/dict/tuple是否是Iterable类型,是否是Iterator类型     Iterable类型?否     这四个数据类型不是Iterable类型,这四个数据类型的对象是Iterable类型     Iterator类型?否 2. [1,2,3]是否是Iterable类型,是否是Iterator类型     Iterable类型?是     Iterator类型?否 3. class User:..是否是Iterable类型,是否是Iterator类型     Iterable类型?否[如果类型重写了__iter__()函数并返回了迭代对象:是]     Iterator类型?否 4. 什么是迭代器?     迭代器是用来判断一个对象是否可以被for循环遍历,并且可以记录循环遍历状态的对象     主要通过collections.Iterable类型来判断是否是可以迭代的类型     在迭代过程中,通过collections.Iterator来记录迭代状态

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏运维技术迷

PHP-数组排序

分别定义一个数值数组和一个关联数组. $age=array("lili"=>"23","bob"=>"30","ben"=>"44"); $c...

3196
来自专栏从流域到海域

《笨办法学Python》 第19课手记

《笨办法学Python》 第19课手记 本节课讲函数和变量(变量和函数的关系是变量作为做函数的参数,定义时是形参,使用时是实参),内容比较简单。 源代码如下: ...

24810
来自专栏编程

python学习第二天:python的函数、循环和条件、类

第一天学习了Python的基本操作,以及几种主要的容器类型,今天学习 ,这样才算对Python有一个大致的了解。今天的学习大纲如下: 三、函数 1、定义函数 四...

1796
来自专栏目标检测和深度学习

常用排序算法总结(2)

1364
来自专栏GAN&CV

python lambda表达式的介绍和使用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25737169/article/d...

3311
来自专栏瓜大三哥

Matlab基本运算3

字符串指的是1xn的字符数组。单个字符是按照unicode编码存储的,每个字符占两个字节 ? 在matlab中,只要用(‘)将需要设定的字符串括起来。 disp...

2116
来自专栏PHP在线

PHP面试题,PHP笔试题

题目一: <?php echo -10%3; ?> 答案:-1。 考查:优先级。 因为-的优先级比%求余的优先级低, 也就是-(10%3)。 题目二: prin...

99915
来自专栏编程

python奇遇记:深入的了解函数

很久没更新了,抱歉。最近一段时间忙着对付各种考试,现在总算是考完了,继续来聊聊Python。Python中的函数使用def关键字定义,这个大家都知道,而且Pyt...

17710
来自专栏和蔼的张星的图像处理专栏

422. 最后一个单词的长度 从后向前遍历

给定一个字符串, 包含大小写字母、空格' ',请返回其最后一个单词的长度。 如果不存在最后一个单词,请返回 0 。 样例 给定 s = "Hello Wo...

942
来自专栏mathor

LeetCode164. 最大间距

 这道题用到了桶排序的思想,但是跟排序没啥关系,思路是这样的,数组中有n个元素,那么就构建n+1个桶,桶的属性有三个,最大值最小值以及是否为空。桶的下标从0...

1152

扫码关注云+社区

领取腾讯云代金券