python中强大优雅的列表推导表达式
推导表达式其实就是简化一些循环判断操作等
生成一个数字1-10的列表,可以有多少种方法?
>>> l = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
>>> l = []
>>> for x in range( 1, 11 ):
... l.append( x )
...
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
>>> l = range( 1, 11 )
>>> l
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
现在看下推导表达式
>>> a = [ x for x in range( 1, 11 ) ]
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>>
有些人,可能会说,直接range( 1, 11 )就好了,多此一举,如果我们要筛选出奇数?
当然,range依然能够做到:
>>> range( 1, 11, 2 )
[1, 3, 5, 7, 9]
>>>
那,如果要得到偶数,需要遍历每一项,判断
>>> a = []
>>> for x in range( 1, 11 ):
... if x % 2 == 0:
... a.append( x )
...
>>>
>>> a
[2, 4, 6, 8, 10]
>>>
他等价于如下的推导表达式:
>>> b = [ x for x in range( 1, 11 ) if x % 2 == 0 ]
>>> b
[2, 4, 6, 8, 10]
>>>
一句话搞定
生成一个坐标系?
>>> dot = [(x,y) for x in range( 1, 10 ) for y in range( 1, 10 ) ]
>>> dot
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
>>>
等价于,如下2重循环:
>>> dot = []
>>> for x in range( 1, 10 ):
... for y in range( 1, 10 ):
... dot.append( ( x, y ) )
...
>>> dot
[(1, 1), (1, 2), (1, 3), (1, 4), (1, 5), (1, 6), (1, 7), (1, 8), (1, 9), (2, 1), (2, 2), (2, 3), (2, 4), (2, 5), (2, 6), (2, 7), (2, 8), (2, 9), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5), (3, 6), (3, 7), (3, 8), (3, 9), (4, 1), (4, 2), (4, 3), (4, 4), (4, 5), (4, 6), (4, 7), (4, 8), (4, 9), (5, 1), (5, 2), (5, 3), (5, 4), (5, 5), (5, 6), (5, 7), (5, 8), (5, 9), (6, 1), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6), (6, 7), (6, 8), (6, 9), (7, 1), (7, 2), (7, 3), (7, 4), (7, 5), (7, 6), (7, 7), (7, 8), (7, 9), (8, 1), (8, 2), (8, 3), (8, 4), (8, 5), (8, 6), (8, 7), (8, 8), (8, 9), (9, 1), (9, 2), (9, 3), (9, 4), (9, 5), (9, 6), (9, 7), (9, 8), (9, 9)]
>>>
生成一个递增字符串列表:
>>> ['the number:%s' % n for n in range( 1, 10 ) ]
['the number:1', 'the number:2', 'the number:3', 'the number:4', 'the number:5', 'the number:6', 'the number:7', 'the number:8', 'the number:9']
求1-9每个数的平方
>>> [x ** 2 for x in range( 1, 10 ) ]
[1, 4, 9, 16, 25, 36, 49, 64, 81]
>>>
用字典打包一层,相同的键后面会覆盖前面的
>>> dict( [( x, y ) for x in range( 1, 5 ) for y in range( 1, 5 )] )
{1: 4, 2: 4, 3: 4, 4: 4}
>>> [( x, y ) for x in range( 1, 5 ) for y in range( 1, 5 )]
[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
列表的引用,跟javascript类型:
>>> l = ['my', 'name', 'is', 'ghostwu' ]
>>> l
['my', 'name', 'is', 'ghostwu']
>>> a = l
>>> a[3] = 'wukong'
>>> l
['my', 'name', 'is', 'wukong']
>>> del a
>>> l
['my', 'name', 'is', 'wukong']
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>>
del a,删除的是 列表的引用,跟php垃圾回收机制类似,两个变量指向一个列表,删除其中一个,但是另一个还是指向那个列表.
>>> a = [10, 20, 30 ]
>>> b = a
>>> b
[10, 20, 30]
>>> del a
>>> a
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> b
[10, 20, 30]
>>>
del a[], 这个指的是清空列表
>>> a = [ 10, 20, 30 ]
>>> b = a
>>> del a[:]
>>>
>>> a
[]
>>> b
[]
>>>
python中强大优雅的列表推导表达式的更多相关文章
- python中字典排序,列表中的字典排序
python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...
- Python进阶(四)----生成器、列表推导式、生成器推导式、匿名函数和内置函数
Python进阶(四)----生成器.列表推导式.生成器推导式.匿名函数和内置函数 一丶生成器 本质: 就是迭代器 生成器产生的方式: 1.生成器函数
- python全栈开发- day14列表推导式、生成器表达式、模块基础
一.列表推导式 #1.示例 数据量小 egg_list=[] for i in range(10): egg_list.append('鸡蛋%s' %i) egg_list=['鸡蛋%s' %i fo ...
- python基础(14):生成器、列表推导式
1. 生成器 什么是⽣成器?⽣成器实质就是迭代器. 在python中有三种⽅式来获取⽣成器: 1. 通过⽣成器函数 2. 通过各种推导式来实现⽣成器 3. 通过数据的转换也可以获取⽣成器 ⾸先,我们先 ...
- python序列(八)列表推导式实列
1.列表推导式列表推导能非常简洁的构成一个新列表:只用一条简洁的表达式即可对得到的元素进行转换变形. 格式:[表达式 for 变量 in 列表]或[表达式 for 变量 in 列表 if 条件] 过滤 ...
- 《Python CookBook2》 第四章 Python技巧 对象拷贝 && 通过列表推导构建列表
(先学第四章) 对象拷贝 任务: Python通常只是使用指向原对象的引用,并不是真正的拷贝. 解决方案: >>> a = [1,2,3] >>> import c ...
- python 学习笔记二 (列表推导式)
2018年年初写了第一篇博客,说要做一个认真的技术人 https://www.cnblogs.com/yingchen/p/8455507.html 今天已经是11月19日了,这是第二篇博客,看来坚持 ...
- Python 中更优雅的日志记录方案
在 Python 中,一般情况下我们可能直接用自带的 logging 模块来记录日志,包括我之前的时候也是一样.在使用时我们需要配置一些 Handler.Formatter 来进行一些处理,比如把日志 ...
- Python的高级特性2:列表推导式,生成器与迭代器
一.列表推导式 1.列表推导式是颇具python风格的一种写法.这种写法除了高效,也更简短. In [23]: {i:el for i,el in enumerate(["one" ...
随机推荐
- Spring Boot切换为APR模式
Spring Boot内置了tomcat容器,直接运行Application就可以启动web服务器. 在tomcat中提供了三种方式:BIO.NIO.APR. BIO tomcat7以下的版本都是BI ...
- 利用CVE-2018-0950漏洞自动窃取Windows密码
i春秋作家:浅安 0×00 前言 记得还在2016年的时候,我的一个同事那时还在使用CERT BFF(自动化模糊测试工具),他向我询问到如何将微软办公软件中看起来可利用的漏洞转化成可以运行的病毒程序并 ...
- linux下mysql的远程访问
安装了虚拟机centos,安装mysql后,在win7下无法用工具访问mysql.提示连接失败. 1.授权远程访问. GRANT ALL PRIVILEGES ON databasename.* TO ...
- C标准库pow函数精度问题。
#include <stdio.h> int main () { int temp,i; double a=2.4568; unsigned ]; ;i<;i++) { temp=( ...
- Nodejs的模块系统
global对象 浏览器端JavaScript中的全局对象为"window",在浏览器中定义的变量都会成为"window"对象的属性. 不像浏览器端JavaSc ...
- odoo开发笔记 -- 数据库备份策略
odoo默认的数据库为postgresql数据库, PG是个非常强大的数据库,也是未来的一个趋势. 对于odoo的数据备份,odoo提供了自己的备份方式, 1. 从前台页面.输入odoo应用访问地址, ...
- Java实现Socket通信
一对一通信: 服务器端: public class ServerDemo { public static void main(String[] args) { ServerSocket serverS ...
- mycat中间件--schema.xml配置文件详解
schema.xml管理着MyCat的逻辑库.表.分片规则.DataNode以及DataSource.弄懂这些配置,是正确使用MyCat的前提. <?xml version="1.0& ...
- MySQL和Mariadb二进制日志binlog详解
Mariadb/mysql提供了4中不同的日志,分别是错误日志(error.log).普通日志(general log).慢日志(slow log)以及二进制日志(binlog).错误日志记录了系统启 ...
- Python3 中使用sys.argv详解
#/usr/bin/env python #coding:utf-8 import sys # print(sys.argv[1]) def readFile(filename): "&qu ...