(一)使用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的更多相关文章

  1. 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 ...

  2. Python List comprehension列表推导式

    http://blog.chinaunix.net/uid-28631822-id-3488324.html 具体内容需要进一步学习

  3. python内存数据库pydblite

    Pure-Python engine 最近由于项目开发中发现python informixDB模块对多线程的支持非常不好,当开启两个线程同时连接informix数据库的时候,数据库会报错,显示SQL ...

  4. Python从题目中学习:List comprehension

    九九乘法表作业其实有更简单的做法,就是用列表推导式. ------------------------------------------------------------------------- ...

  5. Python 列表解析list comprehension和生成表达式generator expression

    如果想通过操作和处理一个序列(或其他的可迭代对象)来创建一个新的列表时可以使用列表解析(List comprehensions)和生成表达式(generator expression) (1)list ...

  6. 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)) ...

  7. Python(五)模块

    本章内容: 模块介绍 time & datetime random os sys json & picle hashlib XML requests ConfigParser logg ...

  8. python模块(shelve,xml,configparser,hashlib,logging)

    1.1shelve模块 shelve 模块比pickle模块简单,只有一个open函数,返回类似字典对象,可读可写:key必须为字符串, 而值可以是python所支持的数据类型. shelve模块主要 ...

  9. Python基本语法

    目录缩进流程控制语句表达式函数对象的方法类型数学运算 缩进Python开发者有意让违反了缩进规则的程序不能通过编译,以此来强制程序员养成良好的编程习惯.并且Python语言利用缩进表示语句块的开始和退 ...

随机推荐

  1. Python自动化之迭代器不能在迭代的时候更改值

    除列表外的其他序列都是不可变的, 所以危险就发生在这里. 一个序列的迭代器只是记录你当前到达第多少个元素, 所以如果你在迭代时改变了元素, 更新会立即反映到你所迭代的条目上.在迭代字典的 key 时, ...

  2. Java反射学习二

    利用反射进行对象拷贝的例子 如下例程ReflectTester类进一步演示了Reflection API的基本使用方法. ReflectTester类有一个copy(Object object)方法, ...

  3. linux shell基本知识 sleep命令

    在有的shell(比如linux中的bash)中sleep还支持睡眠(分,小时) sleep 睡眠1秒 sleep 1s 睡眠1秒 sleep 1m 睡眠1分 sleep 1h 睡眠1小时

  4. mapent

    package test12; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import ja ...

  5. ASP.NET Core下载大文件的实现

    当我们的ASP.NET Core网站需要支持下载大文件时,如果不做控制可能会导致用户在访问下载页面时发生无响应,使得浏览器崩溃.可以参考如下代码来避免这个问题. 关于此代码的几点说明: 将数据分成较小 ...

  6. vue请求本地自己编写的json文件。

    1.第一步,这是目录结构 2.接下来是build/webpack.dev.conf.js文件需要配置的内容 代码: //vue配置请求本地json数据const express = require(' ...

  7. Linux入门基础(一):Linux基本操作

    命令行BASH基本操作 Shell 用户不能直接操作内核,所以用户操作通过shell传递给内核 shell分为两种 : GUI 图形界面 (linux一般是GNOME) CLI 命令行界面 (linu ...

  8. kali linux修改更新源及更新

    1.修改sources.list源文件: leafpad /etc/apt/sources.list #aliyun 阿里云 deb http://mirrors.aliyun.com/kali ka ...

  9. 用NI的数据采集卡实现简单电子测试之5——压控振荡器的测试

    本文从本人的163博客搬迁至此. 为了展示连续信号采集的方法,以其外部触发采集功能.我用运算放大器实现了一个最简单的低频压控振荡器(VCO),作为USB-6009采集的信号源.在LabVIEW下编写的 ...

  10. C语言第四次实验

    这次实验共计7道题目 以下代码亲测无误 1.用选择排序法,键盘输入10个整数,对10个整数进行排序(升序) 1.第一种思路就是常规思路,输入--排序--输出 源代码如下: //常规思路,输入,排序,输 ...