推导式
推导式是从一个或者多个迭代器快速简洁地创建数据结构的一种方法。它可以将循环和条件判断结合,从而避免语法冗长的代码。会使用推导式有时可以说明你已经超越了python初学者的水平。也就是说使用推导式更像Python风格。
一、列表推导式
之前已经说过创建列表的多种方法,使用[ ] 、list() 、str.split() 等方法,除此之外,列表推导式也是生成具有一定规律的列表的方法。
如创建一个从1到5的整数列表:
number_list = [] number_list.append(1) number_list.append(2) number_list.append(3) number_list.append(4) number_list.append(5)
2.
number_list = [] for i in range(1,6): number_list.append(i) print(number_list)
3.
number_list = list(range(1,6))
4.更简单的一种方法即列表推导式
[ expression for item in iterable ]也可以加上条件表达式:
[ expression for item in iterable if condition]
也可以加上多个条件表达式:
[ expression for item_1 in iterable_1 if condition_1 for item_2 in iterable_2 if condition_2]
二、字典推导式
除了列表,字典也有自己的推导式:
[ key_expression : value_expression for expression in iterable ]
类似于列表推导,字典推导也有if 条件判断及多个 for 循环迭代语句:
word = 'letters' letter_count = {letter :word.count(letter)for letter in set(word) }
得到:
letter_count —— > {'t' :2 ,'l' :1, 'e': 2, 'r': 1, 's' : 1}
三、集合推导式
{ expression for expression in iterable }
四、生成器推导式
元组是没有推导式的。并不是将列表推导式中的方括号变成圆括号就可以定义元组推导式,就像下面的表达式一样:
number_thing = (number for number in range(1,6))
其实,圆括号之间的是生成器推导式,它返回的是一个生成器对象:
注:一个生成器只能运行一次。列表、集合、字符串和字典都存储在内存中,但是生成器仅在运行中产生值,不会被存下来。所以不能重新使用或者备份一个生成器。