python学习之路(13)
列表生成式
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。
举个例子,要生成list [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]可以用range(1, 11):
>>> range(1,11)
range(1, 11
但如果要生成[1x1, 2x2, 3x3, ..., 10x10]怎么做?方法一是循环:
>>> range(1,11)
range(1, 11)
>>> list=[]
>>> for x in range(1,11):
list.append(x*x) >>> list
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
但是循环太繁琐,而列表生成式则可以用一行语句代替循环生成上面的list:
>>> list=[x*x for x in range(1,11) if x%2==0]
>>> list
[4, 16, 36, 64, 100]
还可以使用两层循环,可以生成全排列:
>>> list=[m+n for m in'dasd' for n in'sad']
>>> list
['ds', 'da', 'dd', 'as', 'aa', 'ad', 'ss', 'sa', 'sd', 'ds', 'da', 'dd']
三层和三层以上的循环就很少用到了。
运用列表生成式,可以写出非常简洁的代码。例如,列出当前目录下的所有文件和目录名,可以通过一行代码实现:
>>> import os
>>> list=[d for d in os.listdir('.')]
>>> list
['10.py', '360安全卫士.lnk', '7dLauncher.exe', '8月新答题', 'chenzaifen', 'cmd.exe.lnk', 'desktop.ini', 'Dota 2.url', 'Google Chrome.lnk', 'mimikatz_trunk.rar', 'phpStudy.lnk', 'pop3', 'Python电子邮件', 'Python电子邮件.zip', 'WeGame.lnk', 'wire', '~$PowerShell.exe 执行 Empire 的几种姿势.doc', '助教工作', '协议分析', '学习之路', '密码学重修', '小工具', '新建文件夹', '新建文件夹 (2)', '新建文件夹 (3)', '极速PDF编辑器.lnk', '爱奇艺.lnk', '百度网盘.lnk', '网络协议', '网络渗透', '逆向', '酷狗音乐.lnk']
for循环其实可以同时使用两个甚至多个变量,比如dict的iteritems()可以同时迭代key和value:
>>> for k,v in d.items():
print(k,'=',v) sdad = dsad
adsa = sdaasda
asdassad = asdas
因此,列表生成式也可以使用两个变量来生成list:
>>> d={'x':'','y':'','z':''}
>>> list=[k+'='+v for k,v in d.items()]
>>> list
['x=1', 'y=2', 'z=3']
最后把一个list中所有的字符串变成小写:
>>> list=['DSADA','DSADSA','SA']
>>> list=[s.lower()for s in list]
>>> list
['dsada', 'dsadsa', 'sa']
运用列表生成式,可以快速生成list,可以通过一个list推导出另一个list,而代码却十分简洁。
思考:如果list中既包含字符串,又包含整数,由于非字符串类型没有lower()方法,所以列表生成式会报错:
>>> L= ['Hello', 'World', 18, 'Apple', None]
>>> [s.lower() for s in L]
Traceback (most recent call last):
File "<pyshell#106>", line 1, in <module>
[s.lower() for s in L]
File "<pyshell#106>", line 1, in <listcomp>
[s.lower() for s in L]
AttributeError: 'int' object has no attribute 'lower'
使用内建的isinstance函数可以判断一个变量是不是字符串:
>>> x='dasd'
>>> y=123151
>>> isinstance(x,str)
True
>>> isinstance(y,str)
False
python学习之路(13)的更多相关文章
- Python学习之路13☞常用模块
一 time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运行“type(t ...
- python学习之路-13
SQLAlchemy ORM框架 连表操作 一对多 创建表 指定约束 ForeignKey from sqlalchemy import create_engine from sqlalchemy.e ...
- python学习之路-day2-pyth基础2
一. 模块初识 Python的强大之处在于他有非常丰富和强大的标准库和第三方库,第三方库存放位置:site-packages sys模块简介 导入模块 import sys 3 sys模 ...
- Python学习之路-Day2-Python基础2
Python学习之路第二天 学习内容: 1.模块初识 2.pyc是什么 3.python数据类型 4.数据运算 5.bytes/str之别 6.列表 7.元组 8.字典 9.字符串常用操作 1.模块初 ...
- Python学习之路【第一篇】-Python简介和基础入门
1.Python简介 1.1 Python是什么 相信混迹IT界的很多朋友都知道,Python是近年来最火的一个热点,没有之一.从性质上来讲它和我们熟知的C.java.php等没有什么本质的区别,也是 ...
- python学习之路------你想要的都在这里了
python学习之路------你想要的都在这里了 (根据自己的学习进度后期不断更新哟!!!) 一.python基础 1.python基础--python基本知识.七大数据类型等 2.python基础 ...
- Python学习之路-Day2-Python基础3
Python学习之路第三天 学习内容: 1.文件操作 2.字符转编码操作 3.函数介绍 4.递归 5.函数式编程 1.文件操作 打印到屏幕 最简单的输出方法是用print语句,你可以给它传递零个或多个 ...
- Python学习之路-Day1-Python基础
学习python的过程: 在茫茫的编程语言中我选择了python,因为感觉python很强大,能用到很多领域.我自己也学过一些编程语言,比如:C,java,php,html,css等.但是我感觉自己都 ...
- python学习之路网络编程篇(第四篇)
python学习之路网络编程篇(第四篇) 内容待补充
- python 学习之路开始了
python 学习之路开始了.....记录点点滴滴....
随机推荐
- python-day39(正式学习)
目录 线程锁 死锁问题及递归锁 死锁 递归锁 信号量 GIL全局解释器锁 线程锁 from threading import Thread,Lock x=0 lock=Lock() def test( ...
- 14、PCA分析
做芯片PCA主成分分析可以选择使用affycoretools包的plotPCA方法,以样品"GSM363445_LNTT.CEL"."GSM362948_LTT.CEL& ...
- C# 如何判断指定文件是否正被其它程序使用
C# 如何判断指定文件是否正被其它程序使用 起因:项目中发现在操作文件时,系统经常抛出异常,表示文件正被其它程序占用. 需求:为了事先判断,以确认指定的文件是否正被其它程序使用,需要方法进行判断. 思 ...
- celery 分布式异步队列框架使用方法
简介: Celery 是一个python开发的异步分布式任务调度模块,是一个消息传输的中间件,可以理解为一个邮箱,每当应用程序调用celery的异步任务时,会向broker传递消息,然后celery ...
- 【Java面试题】解释内存中的栈(stack)、堆(heap)和静态存储区的用法
Java面试题:解释内存中的栈(stack).堆(heap)和静态存储区的用法 堆区: 专门用来保存对象的实例(new 创建的对象和数组),实际上也只是保存对象实例的属性值,属性的类型和对象本身的类型 ...
- Date对象中的方法
特殊说明:设置时间的方法,虽然W3C说明传参的范围,在开发过程中,传入的参数不在该范围也是可以的.例如: var t = new Date(), d = t.getDate(); //当天时间往前推2 ...
- jquery 知识整理
大纲一.jQuery简介 二.jQuery 和Dom关系及jQuery版本 1.jQuery版本 2.jQuery和Dom转换 三.jQuery 选择器 1.1.基本 1.2.层级 2.基本筛选器 3 ...
- MySQL 5.7 免安装版 access denied 解决办法
MySQL 5.7 在Windows 下安装的过程很多人都写过了 但是安装完成后用 root 第一次登录时需要密码 可是我根本就没设密码嘛... 搞了半天最后终于搞定了 在执行 mysqld --in ...
- Android单元测试之google官例CalculatorTest
执行测试用例类CalculatorTest 设置genymotion可见: Android Studio界面中,依次单击菜单项 View >Toolbar.即可见改工具按钮. 启动gen ...
- 标准C语言(13)
函数指针可以作为形式参数使用,会作为实际参数使用的函数叫回调函数 /* * 回调函数演示 * */ #include <stdio.h> void print_cb(int *p_num) ...