(一)使用List Comprehension的好处 app
在了解Python的List Comprehension以前,咱们习惯使用for循环建立列表,好比下面的例子:ide
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的功能:spa
my_list = map(lambda a: a*a, numbers)
上面三个代码段的功能相似,除了map函数返回的是iterator,可是从可读性来讲,List Comprehension是最好的code
(二)一些较为复杂的List Comprehensionblog
(1)加上if判断条件的List Comprehension:ip
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 Comprehensionit
与List Comprehension相似,咱们能够对Dictionary和Set操做:io
假设咱们有以下两个列表:
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.