咱們通常正常使用for循環是這樣子的:學習
for i in range(10): print('表白:%s'% i)
一、能夠看到咱們直接一個for循環可能你直接就拿到了它的所有數據,可是換成生成器表達式它即可以一個一個取值,從而也節約了佔用內存空間。spa
固然也能夠再用for循環一次洗取完值,能夠說是很是方便又節約內存。code
# 一、生成器表達式 g = ('表白:%s' % i for i in range(10)) print(g) # 拿到的是:生成器 print('我是next:%s' % next(g)) # 可用next一個一個取值,至關於 __next__ 方法。 print('我是__next__:%s' % g.__next__()) for i in g: print(i)
二、生活中的例子:咱們春節在家裏作湯圓,加入麪粉足量的狀況下,你家裏作了100個家人們一塊兒能吃完嗎?blog
顯然是不可能那麼快的,那麼咱們在家裏就是這樣作:先作20個吃完,再作,吃完再作,是否是很像生成器呢?內存
一、列表推導式:jenkins
ret = ['表白:%s' % i for i in range(10)] print(ret)
二、完整推導式,if 判斷過濾,相似篩選功能for循環
# 如1:把 100 之內能被5整除的數 g = [i for i in range(100) if i % 5 == 0] print(g)
三、多層嵌套的推導式,先for外面層次,一層一層for。class
names = [['xiag', 'ee', 'asde', 'asde'], ['mina', 'andy', 'asdee', 'jenkinse']] ret = [name for lists in names for name in lists if name.count('a') >= 1] print(ret)
一、字典推導式:將 key 和 value 對調,變爲{'23': 'a', '55': 'bb'}循環
# 將 key 和 value 對調,變爲{'23': 'a', '55': 'bb'} dic = {'a': '23', 'bb': '55'} ret = {dic[i]: i for i in dic} print(ret)
二、集合推導式:自帶去重功能,將1和4都是有重複,但打印出來是隻有一個1和4;方法
# 集合推導式,自帶去重功能 res = {x**2 for x in [1, -1, 2, -2, 3]} print(res)
總結:列表等各類推導式 與 生成器表達式 對比。
歡迎來你們QQ交流羣一塊兒學習:482713805