《Python数据科学指南》——1.7 从另一个列表创建列表——列表推导

1.7 从另一个列表创建列表——列表推导

推导是从一个序列创建另一个序列的操作,例如,我们可以从列表或元组中创建一个列表。本节我们将讲述列表推导。一般地,列表推导具有以下特点。

序列,表示一个我们对其元素感兴趣的列表。

序列的元素拥有可变的表示方法。

使用输入序列的元素来产生输出表达式,以此产生输出序列。

一个可选的谓词表达式。

1.7.1 准备工作

我们先通过一个Python的脚本示例来理解列表推导中涉及的元素的不同之处。先输入一个列表,元素包含了一些正数和负数,我们希望得到的输出是由那些负数元素的平方值构成的列表。

1.7.2 操作方法

下面的示例代码演示了列表推导操作。

# 1.定义一个由一些正整数和负整数构成的简单列表
a = [1,2,-1,-2,3,4,-3,-4]

# 2.现在让我们写出列表推导
# pow()是幂函数,需要两个输入参数,第1个参数是底数,第2个参数是指数,返回的输出为幂值
b = [pow(x,2) for x in a if x < 0]

# 3.最后我们看看保存在新建的列表b里的输出结果
print b

1.7.3 工作原理

这个示例解释了列表推导的不同组成部分。我们来看第2步。

b = [pow(x,2) for x in a if x < 0]

这行代码可做如下解释。

输入是列表a,输出为列表b。

我们用变量x来表示列表中的每个元素。

pow(x,2)是输出表达式,使用输入列表中的元素来计算产生输出列表。

最后,“if x < 0”是一个谓词表达式,它负责选择输入列表中的哪些元素来计算产生输出列表。

1.7.4 更多内容

对字典来说,推导的语法也是相同的,我们来看一个简单的示例。

a = {'a':1,'b':2,'c':3}
b = {x:pow(y,2) for x,y in a.items()}
print b

在上面的示例中,我们从输入的字典a中创建了一个新的字典b,输出结果如下。

{'a': 1, 'c': 9, 'b': 4}

我们保留了字典的键,但其新值是字典a中原来的值的平方。值得注意的一点是在推导过程中,花括号代替了括号。

我们也可以采用一点小技巧来给元组做推导,请看下面的示例。

def process(x):
     if isinstance(x,str):
          return x.lower()
     elif isinstance(x,int):
          return x*x
     else:
          return -9

a = (1,2,-1,-2,'D',3,4,-3,'A')
b = tuple(process(x) for x in a )

print b

我们编写了一个新的处理函数来替代pow()函数,我把它留给读者作为一个练习,以理解这个处理函数的作用。请注意我们遵循和推导列表一样的语法。不过,我们使用圆括号代替括号,这段代码的输出会返回如下错误信息。

<generator object <genexpr> at 0x05E87D00>

哎,我们想要一个元组,但是被一个迭代器终结了(后面的章节我们会介绍迭代器),正确的方式应该是下面这样的。

b = tuple(process(x) for x in a )

这样,“print b”语句将产生如下输出。

(1, 4, 1, 4, 'd', 9, 16, 9, 'a')

Python的推导是基于集迭代器符号的,请参见:

http://en.wikipedia.org/wiki/Set-builder_notation。

关于Itertools.dropwhile,请参见:

https://docs.python.org/2/library/itertools.html#itertools.dropwhile。

借助谓词和序列,dropwhile将只返回满足那些谓词表达式的序列中的项。

时间: 2024-09-20 21:17:53

《Python数据科学指南》——1.7 从另一个列表创建列表——列表推导的相关文章

《Python数据科学指南》——导读

前 言 如今,我们生活在一个万物互联的世界,每天都在产生海量数据,不可能依靠人力去分析产生的所有数据并做出决策.人类的决策越来越多地被计算机辅助决策所取代,这也得益于数据科学的发展.数据科学已经深入到我们互联世界中的每个角落,市场对那些十分了解数据科学算法并且有能力用这些算法进行编程的人才需求是不断增长的.数据科学是多领域交叉的,简单列举几个:数据挖掘.机器学习.统计学等.这对那些渴望成为数据科学家以及已经从事这一领域的人们在各方面都倍感压力.把算法当成黑盒子应用到决策系统里,可能会适得其反.面

《Python数据科学指南》——1.2 使用字典对象

1.2 使用字典对象 在Python语言中,容器是一种对象,它能够容纳任意数量.任意类型的对象.它可以对子对象进行操作,还可以迭代操作.字典.元组.列表还有集合都是容器对象.在collections模块中,Python提供了更多的容器类型.在这一节中,我们先来仔细了解字典. 1.2.1 准备工作 我们先通过一个Python的脚本示例来理解字典是如何操作的,这段脚本用来统计词频,也就是每个词在给定的文本中出现的次数. 1.2.2 操作方法 下面的示例演示了在Python中对字典对象如何操作.通过对

《Python数据科学指南》——1.3 使用字典的字典

1.3 使用字典的字典 我们之前提到,为了完成目标,你得创造性地应用各类数据结构,这样才能发挥它们的威力.接下来,我们通过一个实例来帮助理解"字典的字典". 1.3.1 准备工作 请看表1-1. 第1列中列出了3个用户,其他列都是电影,单元格里是每个用户给电影的评分.我们要把这些数据放到内存中,这样大型程序的其他部分也能方便地访问,此时我们将使用"字典的字典". 1.3.2 操作方法 我们通过匿名函数来创建一个user_movie_rating的字典对象,以此展示&

《Python数据科学指南》——第1章 Python在数据科学中的应用 1.1 简介

第1章 Python在数据科学中的应用 在这一章里,我们将探讨以下主题. 使用字典对象 使用字典的字典 使用元组 使用集合 写一个列表 从另一个列表创建列表--列表推导 使用迭代器 生成一个迭代器和生成器 使用可迭代对象 将函数作为变量传递 在函数中嵌入函数 将函数作为参数传递 返回一个函数 使用装饰器改变函数行为 使用lambda创造匿名函数 使用映射函数 使用过滤器 使用zip和izip函数 从表格数据使用数组 对列进行预处理 列表排序 采用键排序 使用itertools 1.1 简介 Py

《Python数据科学指南》——1.20 从表格数据使用数组

1.20 从表格数据使用数组 数据科学的应用程序要成功解决一个问题,必须先找到适当的处理数据的方法.例如在机器学习中对数据进行预测或分类,要么采用有监督的方法,要么采用无监督的方法.而在此之前,传输数据,把数据清洗到匹配算法,可能已经花费了很长的时间. 通常,有很多种方法对数据进行整理使之适合数据科学程序进行处理,数据科学程序开发者首先面对的挑战是如何访问数据,并用Python的数据结构让这些数据持续可用.掌握使用Python访问数据的诀窍是非常有用的,能让你避过纷扰,直接面对问题的核心内容.

《Python数据科学指南》——1.4 使用元组

1.4 使用元组 在Python中,元组是一种顺序型的容器对象.元组是不可变的,元组中的元素由逗号分隔开,可以对不同类别构成的对象进行排序,不允许插入操作,支持以下操作. in和not in. 比较.串联.切片和索引.min ()和max (). 1.4.1 准备工作 我们讲解字典的时候,描述了完整的功能,对于元组,我们通过一些小段的代码来聚焦于元组的创建与维护操作. 1.4.2 操作方法 先让我们看看一些元组创建和维护的示例代码. # 1.创建一个元组 a_tuple = (1,2,'a')

《Python数据科学指南》——1.8 使用迭代器

1.8 使用迭代器 毫无疑问,对于数据科学的程序而言,数据是极其重要的输入.数据的大小是可变的,有些能装载到内存中,有些则不能.而记录访问架构也是随一种数据格式到另一种而变化.有趣的是,不同的算法处理数据时,需要的是可变长度的组块.例如,假如你在写一个随机梯度下降的算法,你希望在每个时间片传送5000条记录的数据块,如果你对如何访问数据.理解数据格式.依次传送数据.给调用者需要的数据等流程有着清晰的概念,那你才能成功.这样能让你写出清晰的代码.大多数时候,最有趣的部分是我们如何处理数据,而不是我

《Python数据科学指南》——1.10 使用可迭代对象

1.10 使用可迭代对象 可迭代对象和生成器十分相似,但是有一个重要的区别:我们可以重复地访问一个可迭代对象,即使我们已经访问完了序列中的所有元素,我们还可以从头重新访问它,这和生成器是完全不同的. 如果不保持任何状态,它们就是基于对象的生成器.所有带有iter方法的类,在用来产生数据时,都可以被作为无状态对象生成器来使用. 1.10.1 准备工作 我们通过一个简单的示例来理解可迭代对象.如果理解了之前介绍的生成器和迭代器,你也能很容易地理解这个概念. 1.10.2 操作方法 我们来创建一个简单

《Python数据科学指南》——1.19 使用zip和izip函数

1.19 使用zip和izip函数 zip函数将两个相同长度的集合合并成对,它是Python的内置函数. 1.19.1 准备工作 我们通过一个简单示例来演示zip函数. 1.19.2 操作方法 我们传递两个序列给zip函数,并打印输出. print zip(range(1,5),range(1,5)) 1.19.3 工作原理 本例中zip函数的两个参数是两个列表,这两个列表都是由从1到5的数值组成.range函数有3个参数:起始数值.结束数值和步长,默认步长为1.本例中,我们分别把1和5作为列表

《Python数据科学指南》——2.2 使用NumPy库

2.2 使用NumPy库 Python中,NumPy提供了一条高效处理超大数组的途径.大多数Python科学计算库中都在内部使用NumPy处理数组和矩阵操作.在本书中,NumPy被广泛应用,我们在本节介绍它. 2.2.1 准备工作 我们先写一系列语句来操作数组和矩阵,学习如何使用NumPy.目的是让您习惯使用NumPy数组,它也是本书大多数内容的基础. 2.2.2 操作方法 我们先创建一些简单的矩阵和数组. # Recipe_1a.py # 导入NumPy库,命名为np import numpy