如何生成列表?
先试想一下,如果你需要生成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