一、列表推導式
通常原則只用來建立新列表,並盡量保持簡短,如果列表**超過了兩行,就要考慮是不是得用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
二、生成器表示式生成器表示式例子11、 雖然列表推導也可以處理元組,陣列或者其他型別,但是生成器表示式是更好的選擇
2、 生成器的表示式語法和列表推導的差不多,只不過是把中括號換成了圓括號而已
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...