python 列表解析式和生成器

2021-09-24 01:27:37 字數 3146 閱讀 2971

**: 

可以根據已有列表,高效建立新列表的方式。列表解析是python迭代機制的一種應用,它常用於實現建立新的列表,返回的是乙個列表,因此用在中。

列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性

示例1:

生成乙個列表,元素0-9,對每乙個元素自增1後求平方返回新列表

#常規寫法

new =

for i in range(10):

print(new)

#使用列表解析式方法

new = [(i+1)**2 for i in range(10)]

print(new)

輸出結果相同:

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

示例2:

獲取10以內的偶數

list = [i for i in range(10) if i % 2 == 0]

print(list)

輸出結果為:

[0, 2, 4, 6, 8]
示例3:

20以內,即能被2整除又能被3整除的數

#以下兩種方法都可以

list1 = [i for i in range(20) if i % 2 == 0 if i % 3 == 0] #方法一

list2 = [i for i in range(20) if i % 2 == 0 and i % 3 == 0] #方法二

list =

for i in iterablea:

for j in iterableb:

示例1:

list1 = [(x,y) for x in "abc" for y in range(3)]

list2 = [[x,y] for x in "abc" for y in range(3)]

list3 = [ for x in "abc" for y in range(3)]

print(list1)

print(list2)

print(list3)

輸出:

[('a', 0), ('a', 1), ('a', 2), ('b', 0), ('b', 1), ('b', 2), ('c', 0), ('c', 1), ('c', 2)]

[['a', 0], ['a', 1], ['a', 2], ['b', 0], ['b', 1], ['b', 2], ['c', 0], ['c', 1], ['c', 2]]

[, , , , , , , , ]

示例2:

#以下三種輸出一樣,但推薦使用第一種方法,效率更高

list1 = [(i,j) for i in range(7) if i>4 for j in range(20,25) if j >23]

list2 = [(i,j) for i in range(7) for j in range(20,25) if i>4 if j >23]

list3 = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j >23]

print(list1)

print(list2)

print(list3)

輸出:

[(5, 24), (6, 24)]

[(5, 24), (6, 24)]

[(5, 24), (6, 24)]

複雜示例:

1.返回1-10的平方列表

2.有乙個列表list = [1,4,9,16,2,5,10,15],生成乙個新列表。要去新列表元素是lst相鄰2項的和

3.用列表解析式方法列印九九乘法表:

list = [1, 4, 9, 16, 2, 5, 10, 15]

list1 = [i**2 for i in range(1,11)]

list2 = [list[i] + list[i+1] for i in range(len(list)-1)]

print(list1)

print(list2)

[print('{}*{}='.format(j, i, j * i), end='\n' if i == j else '') for i in range(1, 10) for j in range(1, i + 1)]

生成器和列表解析式的區別

生成器

生成器表示式示例:

g = ("".format(i) for i in range(1,6))            

next(g)                                  

for x in g:                               

print(x)                               

print("-----------------------")                  

for x in g :                              

print(x)

計算方式

記憶體占用

計算速度

示例:

a = 

print(a)

輸出:

注意,集合解析式中不能出現列表等不可hash的元素,否則編譯器報錯

示例:

a = 

b =

c =

print(a)

print(b)

print(c)

輸出:

注意,字典解析式中的key不能出現列表等不可hash的元素,否則編譯器報錯

Python之道 列表解析和生成器

python版本 2.7.4 主機環境 gentoo with linux kernel 3.4.36 列表解析完成的功能可以使用for迴圈替代或者map呼叫來替代。對於剛開始使用python的初學者,通常使用簡單的for迴圈,邏輯清晰,這樣會容易理解,特別是在巢狀的時候。效能對比 map呼叫比等效...

列表解析與生成器

1 語法 返回值 for 元素 in 可迭代物件 if 條件 使用中括號,內部是for迴圈,if條件語句可選 返回乙個新列表 高階 expr for i in iterable for j in iterable2 等價於 ret for i initerable1 for j in iterabl...

列表解析式和生成器表示式

列表解析式 expr for iter var in iterable expr for iter var in iterable if cond expr 例如 i 10 for i in range 10 結果 0,10,20,30,40,50,60,70,80,90 i 10 for i in...