python-22-生成器表達式和列表等各類推導式

前言

咱們通常正常使用for循環是這樣子的:學習

for i in range(10):
    print('表白:%s'% i)

1、生成器表達式

一、能夠看到咱們直接一個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個吃完,再作,吃完再作,是否是很像生成器呢?內存

2、列表等各類推導式

一、列表推導式: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)

3、其餘推導式

一、字典推導式:將 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

相關文章
相關標籤/搜索