Python List Comprehension

(一)使用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.

相關文章
相關標籤/搜索