python 列表推導和生成器表示式

2021-10-10 16:48:06 字數 3521 閱讀 9988

一、列表推導式

通常原則只用來建立新列表,並盡量保持簡短,如果列表**超過了兩行,就要考慮是不是得用for迴圈重寫了

例子1

# 1、建立新列表

new_list =

[i for i in

range(10

)]print

(new_list)

執行結果:

f:\virtualenvironment\venv\scripts\python.exe [0

,1,2

,3,4

,5,6

,7,8

,9]process finished with exit code 0

例子2

# 1、根據變數新建列表

# 2、ord() 內建函式,顯示返回對應的 ascii 數值,或者 unicode 數值

variable =

'asdfghjkl'

var_list =

[ord

(j)for j in variable]

print

(var_list)

執行結果:

f:\virtualenvironment\venv\scripts\python.exe [97

,115

,100

,102

,103

,104

,106

,107

,108

]process finished with exit code 0

例子3

# 1、取出字典中的value值

variable_dict =[,

,,,]

var_list_one =

[k['key'

]for k in variable_dict]

print

(var_list_one)

執行結果:

f:\virtualenvironment\venv\scripts\python.exe [55

,66,11

,22,33

]process finished with exit code 0

例子4

# 1、列表推導計算笛卡爾積

colors, sizes =

['black'

,'white'],

['s'

,'m'

,'l'

]shirts =

[(color, size)

for color in colors for size in sizes]

print

(shirts)

執行結果:

f:\virtualenvironment\venv\scripts\python.exe[(

'black'

,'s'),

('black'

,'m'),

('black'

,'l'),

('white'

,'s'),

('white'

,'m'),

('white'

,'l')]

process finished with exit code 0

二、生成器表示式
生成器表示式

1、 雖然列表推導也可以處理元組,陣列或者其他型別,但是生成器表示式是更好的選擇

2、 生成器的表示式語法和列表推導的差不多,只不過是把中括號換成了圓括號而已

例子1

variable_one =

'qwertyui'

generate_one =

(v for v in variable_one)

print

(generate_one)

# 建立的是生成器的物件

執行結果:

f:\virtualenvironment\venv\scripts\python.exe 

at 0x000002f8cce07748

>

process finished with exit code 0

例子2

variable_two =

'qwertyui'

generate_two =

tuple

(v for v in variable_two)

# tuple可以換成list和set;不能換成dict

print

(generate_two)

執行結果:

f:\virtualenvironment\venv\scripts\python.exe 

('q'

,'w'

,'e'

,'r'

,'t'

,'y'

,'u'

,'i'

)process finished with exit code 0

三、生成器表示式和列表推導式的優缺點
生成器是逐個地產出元素,而不是先建立乙個完整的列表,再把這個列表傳遞到某個建構函式裡

1、對於生成器表示式, 只有你需要的時候它才會求值, 這也是和列表推導的區別, 列表推導只要你執行, 建立列表後一直往裡面塞,直到值被塞完

2、生成器表示式不會一直塞, 而當你呼叫第乙個函式的時候, 他把相應的先求出來, 然後停止, 等你下一次呼叫, 這個就完美符合我們的預期了.

二者的優缺點

ps:下面的**執行時可以打斷點去**,特別直觀

variable_two =

'qwertyui'

deffunction()

:# generate_one = tuple(v for v in variable_two) # 建立後,會調一次執行一次

# return generate_one

var_list =

[j for j in variable_two]

# 建立後,會一次性執行完,然後結束

return var_list

print

(function(

))

一直都在努力變好中,希望您也是,加油!

生成器,生成器推導式和列表推導式

python社群,大部分生成器和迭代器是一種 生成器的本質是迭代器 唯一區別 生成器是我們自己用python 構建的資料結構 迭代器都是提供的,或者轉化得來的 生成器函式 生成器表示式 python提供的 yield 乙個next 對應乙個yield yield和下乙個yield中間有 的話只執行乙...

生成器及列表推導式

迭代器 內部含有 iter next 方法的物件 可迭代物件不能取值,因為內部沒有 next 的方法 迭代器的優點 1 節省記憶體 2 惰性機制 3 單向 不可逆 如何判斷可迭代物件 迭代器 1 iter in dir obj 2 引用乙個模組 from collections import ite...

python中的列表推導與生成器

def t1 func1 lambda x x i for i in range 10 result1 f1 2 for f1 in func1 print result1 def t2 func2 lambda x,i i x i for i in range 10 result2 f2 2 fo...