Python List Comprehension

(一)使用List Comprehension的好处 

 在了解Python的List Comprehension之前,我们习惯使用for循环创建列表,比如下面的例子:

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的功能:

my_list = map(lambda a: a*a, numbers)

上面三个代码段的类似,除了map函数返回的是iterator,但是从可读性来说,List Comprehension是最好的

(二)一些较为复杂的List Comprehension

(1)加上if的List Comprehension:

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 Comprehension

扫描二维码关注公众号,回复: 1341171 查看本文章

与List Comprehension类似,我们可以对Dictionary和Set操作:

我们有两个列表:

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

猜你喜欢

转载自www.cnblogs.com/z-joshua/p/9122578.html
今日推荐