一、zip的坑

zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向

数列首地址,在3.0以下版本返回List类型的列表数列。我用的是3.5版本python,

所以zip返回的是指向地址。

先看几个例子

结果:

可见,在3.0以上版本,对zip函数返回的结果采用list函数可以转化为列表。

通过列表生成式同样可以将zip结果化为列表。

结果:

当zip操作的对象为一个列表,那么生成的列表中每个元素(元祖)中

为(n,)形式。

当zip操作的多个列表长度不一样,那么zip返回生成的列表中元素个数

为最短列表长度。

结果为:

list函数可以将一个元祖转化为列表。下面可以将zip返回的数据转化为

我们方便操作的列表元素.

结果:

这样将zip函数返回的数据通过list和迭代,生成了二维List,方便以后操作。

下边这段代码在3.0版本以上和3.0版本以下会有不同结果。

2.7版本结果:

3.0版本结果

之前提起过zip在3.0以上版本返回迭代器指向内存地址。3.0以下

版本返回的为列表,所以在3.0版本一下输出是符合最初目的。

但是3.0版本python最后一行输出却为空列表[]。

这个原因主要是迭代器在被循环迭代或者访问后,会自动

移动指针,指向下一个要迭代的元素。这和C++是不同的,

C++/C语言需要用户自己控制迭代器移位。

那么肯定有人会说第一句和第三句打印的list1的值相同,

是不是list1迭代器指向的空间没有移动呢?

不是的,只要list1被循环迭代,内部指向空间的地址就会变化,

只是调用print打印list1时,python只返回迭代器指向空间的首地址,

而不会告诉具体指向的地址空间。

修改下代码,看看是不是上文所述那样:

结果:

可见,输出list1指向地址内容的时候出现StopIteration异常,

这个异常前几篇介绍过,是因为迭代器已经指向空间的末尾了,

再调用就会出现该异常,所以对于迭代器当遍历迭代后一定要注意

迭代器指向地址变化的问题。

二、迭代器的坑

迭代器的问题就在于被迭代使用后,内部指向的地址空间变化了,

但是打印迭代器,返回的认为迭代器最初指向的内存空间首地址。

结果:

每次打印g返回结果都一样,但是g指向的位置确实变了。

说实话,这种隐藏性的问题应该让别人知道。

、矩阵的转置和左右逆置

通过zip函数可以实现矩阵的转置和逆置,

将矩阵按照每一行存储在一个list中,这些list再组合成一个大的list,构成二维list表示矩阵。

矩阵的转置:

下边的例子可以看效果:

结果:

同样的道理,矩阵的左右逆置

结果:

、format函数介绍

format函数通过{}替代%,实现字符串的动态匹配。

结果:

、defaultdict函数介绍

实现一个统计字符串个数的功能。
strings = ('puppy', 'kitten', 'puppy', 'puppy',
'weasel', 'puppy', 'kitten', 'puppy')
如果用下边的代码实现统计功能

当counts中不存在某个单词,第一次调用counts[kw]+=1会提示报错。

所以有几种方式实现该功能。

这种方式先判断counts中是否含有关键字,没有就先赋值。

这种方式通过设置counts中关键字对应的默认值,当counts中不存在某个关键字,

那么该关键字对应的value为0,然后该值+1,表示第一次统计。

如果counts中存在该关键字,那么就不执行setdefault函数,关键字对应的value值加1。

这种方式引用了collections的defaultdict,difaultdict接收一个函数,该函数

返回dict中元素的默认值。

、any函数介绍

any函数接收一个可迭代对象,一般为list或者tuple,list或者tuple中有一个

元素满足条件any函数就返回true,当所有元素都不满足条件,any返回false

结果:

这是后一篇制作2048游戏的准备,下一篇制作2048小游戏

谢谢关注我的公众号

python学习笔记(四) 思考和准备的更多相关文章

  1. Python学习笔记(四)Python函数的参数

    Python的函数除了正常使用的必选参数外,还可以使用默认参数.可变参数和关键字参数. 默认参数 基本使用 默认参数就是可以给特定的参数设置一个默认值,调用函数时,有默认值得参数可以不进行赋值,如: ...

  2. Python学习笔记四

    一.装饰器 1.知识储备 函数对象 函数可以被引用 函数可以当参数传递 返回值可以是函数 可以当作容器的元素 def func1(): print (666) def func2(): print ( ...

  3. Python学习笔记四:面向对象编程

    一:定义类并创建实例 Python中定义类,通过class关键字,类名开头大写,参数列表为所继承的父类.如果没有需要明确继承的类,则继承object. 使用类来创建对象,只需 类名+() 形式即可,p ...

  4. python学习笔记(四):函数

    一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...

  5. python学习笔记(四):生成器、内置函数、json

    一.生成器 生成器是什么?其实和list差不多,只不过list生成的时候数据已经在内存里面了,而生成器中生成的数据是当被调用时才生成呢,这样就节省了内存空间. 1. 列表生成式,在第二篇博客里面我写了 ...

  6. 【Python学习笔记四】获取html内容之后,如何提取信息:使用正则表达式筛选

    在能够获取到网页内容之后,发现内容很多,那么下一步要做信息的筛选,就和之前的筛选图片那样 而在python中可以通过正则表达式去筛选自己想要的数据 1.首先分析页面内容信息,确定正则表达式.例如想获取 ...

  7. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  8. Python学习笔记四--字典与集合

    字典是Python中唯一的映射类型.所谓映射即指该数据类型包含哈希值(key)和与之对应的值(value)的序列.字典是可变类型.字典中的数据是无序排列的. 4.1.1字典的创建及赋值 dict1={ ...

  9. python学习笔记(四)、条件、循环及其他语句

    1 再谈print和import 1.1 打印多个参数 print 能够同时打印多个表达式,并且能自定义分隔符.如下: print('a','b','c') ——> a b c print('a ...

随机推荐

  1. 在Office 365 的如何给管理员赋予查看所有人邮箱的权限的Powershell

    连接至Office365 的Powershell Get-MsolUser -UserPrincipalName admin@***.partner.onmschina.cn //Get-MsolUs ...

  2. Docker入门与实践之 docker安装与了解

    一.Docker 概述 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后 ...

  3. Linux虚拟机centos系统安装

    linux 其他知识目录 安装完后如果虚拟机网络不通请参考:虚拟机网络不通故障解决 1.centos6.9安装 后面安装出了点问题,ip没有并且eth0网卡找不到,不过重新配置ifcfg-eth0后重 ...

  4. Python Pygame (3) 界面显示

    显示模式: 之前使display模块的set_mode()的方法用来指定界面的大小,并返回一个Surface对象. set_mode()的原型如下: display.set_mode(resoluti ...

  5. Linux系统LVS搭建笔记

    因为客户是国有企业,且一次性购买了14台服务器(16核),14台中暂且先用8台,其中LVS使用5台,NFS一台主要为了共享WEB系统(多台电脑的1.5T的硬盘容量浪费了).MySQL两台,Memcac ...

  6. listagg wm_concat 行转列

    一. 这个写法和wm_concat相似,listagg(day,',')要把哪一列转换为同一行within group (order by day)同一行如何排序 with temp as ( ' d ...

  7. 软件工程团队项目第一个Sprint评论

    (1)跑男:话说我没怎么听懂这个游戏是怎么玩的,可能是由于这是第一组,所以我没有反应过来把,界面设计的还可以,但是像设置,选关,帮助真心没看懂.有一种感觉就是,这个游戏是由一堆的漂亮的图片拼起来的,还 ...

  8. “我爱淘”第二冲刺阶段Scrum站立会议5

    完成任务: 完成了登录界面的实现,可以按照数据库中的用户名密码进行登录,. 计划任务: 在客户端实现分类功能,通过学院的分类查看书籍. 遇到问题: 再登录上了之后,并且保存密码,但是点击退出当前账号这 ...

  9. 基于 IBM WAS ND v6.1 搭建稳定高效的集群环境

    如今的电子商务及电子政务应用系统的发展已经到了一个新的阶段,应用系统的成熟度和可用性都达到了更高的水准.因此庞大的部署规模和海量的用户访问成为目前大型电子商务及电子政务应用系统的显著特征.在这样的情况 ...

  10. 转 docker的下载与安装

    百度网盘下载地址:https://oomake.com/download/docker-windows 道客地址: https://link.jianshu.com/?t=https://get.da ...