Python 列表生成表达式

Date:2018/06/4       Cat:开发者手册       Word:共1044字       Tags:      

文章目录 「隐藏」
  1. 如何生成列表?
  2. 列表生成表达式
  3. 可迭代对象

如何生成列表?

先试想一下,如果你需要生成1-50的数值列表,如果没有列表生成式你将会这样来做:

x = []
i = 1
while i <= 50:
    x.append(i)
    i += 1

还有一种方法就是通过range函数生成整数数列,然后通过list函数生成一个列表返回,大概操作如下:

list(range(0,50))

当然range函数提供了第三个参数,用于设置步数,你可以理解为间隔数,比如我只需要返回0-50中的偶尔,那么我用range生成的数列需要每隔两个数生成一个:

list(range(0,50,2))

列表生成表达式

列表生成式是Python内置的'列表'生成器,那列表生成表达式有什么用?首先我们尝试解决上面的第一个问题:

[x for x in range(0,50)]

那如果要生成0-50每个数的乘积怎么做?可以像下面的代码一样来做:

[x * x for x in range(0,50)]

那如果要生成0-50的数列,但是在其中40数值不需要生成,就可以在表达式中使用判断:

[x for x in range(0,50) if x != 40]

这种使用方法也是最常用的,其他的多层循环不去说明,因为多层循环在表达式中使用,结构化并不清晰,容易造成歧义。

现在我们大概看出来了列表生成表达式的使用方法,整理一下可以大概理解为:

[x          for x in range(0,50)       if x != 50]
[生成的值        可迭代对象                  条件语句]

可迭代对象

什么是可迭代对象?你可以直接理解为可用于for循环的对象都可以叫为可迭代对象,那我们怎么知道哪些对象是可以迭代的?我们可以通过isinstance检查目前的集合类型的数据是否具有collections模块中Iterable对象,如果有那么就可以进行迭代:

from collections import Iterable

isinstance([], Iterable)  
# True

isinstance({}, Iterable)
#True

isinstance(100, Iterable)
#false

从上面看字典也是可以进行迭代的,下面的代码就是列表表达式对字典进行处理生成列表,并将首字母更改为大写,并且下面是在列表生成表达式中产生了两个变量。

dc = {'k': 'this is k', 'l': 'this is l'}
dc_list = ['{}: {}'.format(k.capitalize(),v.capitalize()) for k,v in dc.items()]

print(dc_list)
#['K: This is k', 'L: This is l']

《Python 列表生成表达式》留言数:0

发表留言