Python List Comprehension
(一)使用List Comprehension的好处
在了解Python的List Comprehension之前,我们习惯使用for循环创建列表,比如下面的例子:
numbers = range(10) my_list = []
for number in numbers:
my_list.append(number * number)
print(my_list)
可是在Python中,我们有更简洁,可读性更好的方式创建列表,就是List Comprehension:
my_list = [number * number for number in numbers]
我们也可以用map加上lambda实现上述List Comprehension的功能:
my_list = map(lambda a: a*a, numbers)
上面三个代码段的功能类似,除了map函数返回的是iterator,但是从可读性来说,List Comprehension是最好的
(二)一些较为复杂的List Comprehension
(1)加上if判断条件的List Comprehension:
my_list = [number for number in numbers if number % 2 == 0]
(2)多个维度,可以包含多个for
colors = ['Black', 'White']
sizes = ['S', 'M', 'L']
tshirts = [(color, size) for color in colors for size in sizes]
(三)Dictionary/Set Comprehension
与List Comprehension类似,我们可以对Dictionary和Set操作:
假设我们有如下两个列表:
names = ['Bruce', 'Clark', 'Peter', 'Logan', 'Wade']
heros = ['Batman', 'Superman', 'Spiderman', 'Wolverine', 'Deadpool']
我们利用内置函数zip将上面两个列表打包成包含元组的iterator zip(names, heros) ,用for循环输出如下:
('Bruce', 'Batman')
('Clark', 'Superman')
('Peter', 'Spiderman')
('Logan', 'Wolverine')
('Wade', 'Deadpool')
如果使用for循环把上面的iterator生成字典的话,代码如下:
my_dict = []
for name, hero in zip(names, heros):
my_dict[name] = hero
print(my_dict)
而用Dictionary Comprehension的等价代码是这样的:
my_dict = {name: hero for name, hero in zip(names, heros)}
print(my_dict)
是不是更为简洁?同样也有Set Comprehension:
numbers = [1, 1, 2, 2, 2, 3, 4, 5]
my_set = {number for number in numbers}
print(my_set)
(四)Generator Comprehension
生成器表达式与列表或其他序列类型相比,更节省内存,因为它一次只产出一个值,与List Comprehension的语法非常类似,只是不用[],而使用(),
比如我们求字母序列的ASCII码:
letters = 'ABCDEFG'
genexp_1etters = (ord(letter) for letter in letters)
for letter in genexp_1etters:
print(letter)
程序输出ABCDEF的ASCII码 65 - 71.
Python List Comprehension的更多相关文章
- python list comprehension twos for loop 嵌套for循环
list comprehension 后面可以有多个for loops,每个for后面可以有if [(x, y, x * y)for x in(0,1,2,3)for y in(0,1,2,3)if ...
- Python List comprehension列表推导式
http://blog.chinaunix.net/uid-28631822-id-3488324.html 具体内容需要进一步学习
- python内存数据库pydblite
Pure-Python engine 最近由于项目开发中发现python informixDB模块对多线程的支持非常不好,当开启两个线程同时连接informix数据库的时候,数据库会报错,显示SQL ...
- Python从题目中学习:List comprehension
九九乘法表作业其实有更简单的做法,就是用列表推导式. ------------------------------------------------------------------------- ...
- Python 列表解析list comprehension和生成表达式generator expression
如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...
- python Tricks —— list 镜像复制与 list comprehension 列表解析的顺序
0. 对 list 镜像复制,a = [1, 2, 3] ⇒ [1, 2, 3, 3, 2, 1] a*2 ⇒ a = [1, 2, 3, 1, 2, 3] a.extend(reversed(a)) ...
- Python(五)模块
本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...
- python模块(shelve,xml,configparser,hashlib,logging)
1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...
- Python基本语法
目录缩进流程控制语句表达式函数对象的方法类型数学运算 缩进Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退 ...
随机推荐
- Python自动化之迭代器不能在迭代的时候更改值
除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上.在迭代字典的 key 时, ...
- Java反射学习二
利用反射进行对象拷贝的例子 如下例程ReflectTester类进一步演示了Reflection API的基本使用方法. ReflectTester类有一个copy(Object object)方法, ...
- linux shell基本知识 sleep命令
在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时) sleep 睡眠1秒 sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时
- mapent
package test12; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import ja ...
- ASP.NET Core下载大文件的实现
当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...
- vue请求本地自己编写的json文件。
1.第一步,这是目录结构 2.接下来是build/webpack.dev.conf.js文件需要配置的内容 代码: //vue配置请求本地json数据const express = require(' ...
- Linux入门基础(一):Linux基本操作
命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...
- kali linux修改更新源及更新
1.修改sources.list源文件: leafpad /etc/apt/sources.list #aliyun 阿里云 deb http://mirrors.aliyun.com/kali ka ...
- 用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试
本文从本人的163博客搬迁至此. 为了展示连续信号采集的方法,以其外部触发采集功能.我用运算放大器实现了一个最简单的低频压控振荡器(VCO),作为USB-6009采集的信号源.在LabVIEW下编写的 ...
- C语言第四次实验
这次实验共计7道题目 以下代码亲测无误 1.用选择排序法,键盘输入10个整数,对10个整数进行排序(升序) 1.第一种思路就是常规思路,输入--排序--输出 源代码如下: //常规思路,输入,排序,输 ...