Python中列表生成式和生成器的區別

時間 2021-08-16 12:11:42

1樓:匿名使用者

列表生成式語法:

[x*x for x in range(0,10)] //列表生成式,這裡是中括號

//結果 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

(x*x for x in range(0,10)) //生成器, 這裡是小括號

//結果 at 0x7f0b072e6140>

二者的區別很明顯:

一個直接返回了表示式的結果列表, 而另一個是一個物件,該物件包含了對表示式結果的計算引用, 通過迴圈可以直接輸出

g = (x*x for x in range(0,10))

for n in g:

print n結果0

14916

2536

4964

81當表示式的結果數量較少的時候, 使用列表生成式還好, 一旦數量級過大, 那麼列表生成式就會佔用很大的記憶體,

而生成器並不是立即把結果寫入記憶體, 而是儲存的一種計算方式, 通過不斷的獲取, 可以獲取到相應的位置的值,所以佔用的記憶體僅僅是對計算物件的儲存

2樓:匿名使用者

列表生成器生產一個列表

生成器和列表類似但是隻能遍歷一次

[x for x in range(10)],列表生產器,生成列表(x for x in range(10)),生成器,可以用for...in...遍歷,但是隻能遍歷一次

比如a = (x for x in range(10))for i in a:

....

如果再次for i in a則會報錯

關於python列表推導式和生成器推導式的問題。

3樓:可靠的我心我在

#! usr/bin/python

# -*- coding:utf-8 -*-#python 2.7

#列表推導式

even_numbers = [x for x in range(100,200) if sum(map(lambda y:int(y)**3,str(x))) == x]

print even_numbers

#生成器推導式

even_numbers = (x for x in range(100,200) if sum(map(lambda y:int(y)**3,str(x))) == x)

print even_numbers

print list(even_numbers)

關於python列表生成的一個問題

python怎樣生成隨機矩陣,python怎樣生成一個隨機矩陣

from numpy import random randarray random.random size 2,4 輸出 array 0.93848018,0.42005976,0.81470729,0.98797783 0.12242703,0.42756378,0.59705163,0.3661...

python中怎麼隨機生成驗證碼

usr bin env pythonimport random for i in range 6 print random.randint 0,9 得到隨機的6位數字驗證碼 第二種,得到隨機的6位數字 字元組合的驗證碼,這裡輸出格式可能有點不對,我就不做修改了。usr bin env pythoni...

python中如何生成全是0和1的矩陣

甲骨文蜒怪 溢位測試時,常常需要生成一長串字串去填充緩衝區,用迴圈的話比較麻煩。python中直接可以用乘號來操作字串 shellcode x90 1000執行後,shellcode的值為1000個 x90。同時也可以用加號來操作字串,連線兩個字串的例子如下 import struct buffer...