欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

【python】列表解析式和生成器

系統 1615 0

轉自:?https://www.cnblogs.com/rivendare/p/9493698.html

列表解析式

可以根據已有列表,高效創建新列表的方式。列表解析是Python迭代機制的一種應用,它常用于實現創建新的列表,返回的是一個列表,因此用在[]中。

列表解析式因編譯器進行優化,提高了效率,減少出錯,增加可讀性

語法

  • [ 返回值 for 元素 in 可迭代對象 if條件 ]
  • 使用中括號[ ],內部是for循環,if條件語句可選
  • 返回一個新列表

?示例1:

生成一個列表,元素0-9,對每一個元素自增1后求平方返回新列表

            
              #常規寫法
new = []
for i in range(10):
    new.append((i+1)**2)
print(new)

#使用列表解析式方法
new = [(i+1)**2 for i in range(10)]
print(new)
            
          

?輸出結果相同:

            
              [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
            
          

?

示例2:

獲取10以內的偶數

            
              list = [i for i in range(10) if i % 2 == 0]
print(list)
            
          

輸出結果為:

            
              [0, 2, 4, 6, 8]
            
          

示例3:

20以內,即能被2整除又能被3整除的數

            
              #以下兩種方法都可以
list1 = [i for i in range(20) if i % 2 == 0 if i % 3 == 0]        #方法一
list2 = [i for i in range(20) if i % 2 == 0 and i % 3 == 0]       #方法二
            
          

?

列表解析式進階

  • [返回值 for i in 可迭代對象A for j in 可迭代對象B]
  • 等價于:

      list = []

        for i in iterableA:

          for j in iterableB:

            list.append(expr)

示例1:

            
              list1 = [(x,y) for x in "abc" for y in range(3)]
list2 = [[x,y] for x in "abc" for y in range(3)]
list3 = [{x:y} for x in "abc" for y in range(3)]

print(list1)
print(list2)
print(list3)
            
          

輸出:

            
              [('a', 0), ('a', 1), ('a', 2), ('b', 0), ('b', 1), ('b', 2), ('c', 0), ('c', 1), ('c', 2)]
[['a', 0], ['a', 1], ['a', 2], ['b', 0], ['b', 1], ['b', 2], ['c', 0], ['c', 1], ['c', 2]]
[{'a': 0}, {'a': 1}, {'a': 2}, {'b': 0}, {'b': 1}, {'b': 2}, {'c': 0}, {'c': 1}, {'c': 2}]
            
          

?示例2:

            
              #以下三種輸出一樣,但推薦使用第一種方法,效率更高
list1 = [(i,j) for i in range(7) if i>4 for j in range(20,25) if j >23]
list2 = [(i,j) for i in range(7) for j in range(20,25) if i>4 if j >23]
list3 = [(i,j) for i in range(7) for j in range(20,25) if i>4 and j >23]

print(list1)
print(list2)
print(list3)
            
          

輸出:

            
              [(5, 24), (6, 24)]
[(5, 24), (6, 24)]
[(5, 24), (6, 24)]
            
          

?

復雜示例:

1.返回1-10的平方列表

2.有一個列表list = [1,4,9,16,2,5,10,15],生成一個新列表。要去新列表元素是lst相鄰2項的和

3.用列表解析式方法打印九九乘法表:

            
              list = [1, 4, 9, 16, 2, 5, 10, 15]

list1 = [i**2 for i in range(1,11)]
list2 = [list[i] + list[i+1] for i in range(len(list)-1)]

print(list1)
print(list2)
[print('{}*{}={:<3}'.format(j, i, j * i), end='\n' if i == j else '') for i in range(1, 10) for j in range(1, i + 1)]

            
          

?

生成器表達式

生成器和列表解析式的區別

  • 生成器表達式是按需計算(或稱惰性求值,延遲計算)需要的時候才計算
  • 列表解析式是立即返回值

語法

  • (返回值 for 元素 in 可迭代對象 if 條件)
  • 將列表解析式的中括號換成小括號
  • 返回一個生成器

生成器

  • 可迭代對象
  • 迭代器

生成器表達式示例:

            
              g = ("{:04}".format(i) for i in range(1,6))            
next(g)                                  
for x in g:                                
    print(x)                               
print("-----------------------")                   
for x in g :                               
    print(x)
            
          

?

  • 生成器進行延遲計算
  • 返回迭代器,可進行迭代
  • 對迭代器g使用next()方法,會將g撥動一下
  • 從前到后走完一遍后,不能回頭

?

生成器和列表解析式的對比

計算方式

  • 生成器表達式延遲計算,列表解析式立即計算

內存占用

  • 單從返回值本身來說,生成器表達式省內存,列表解析式返回新列表
  • 生成器沒有數據,內存占用極小,但是使用的時候,雖然一個個返回數據,但是合起來占用內存相當
  • 列表解析式構造新的列表需要占用內存

計算速度

  • 單看計算時間,生成器表達式耗時非常短,列表解析式耗時長
  • 但是生成器本身并沒有返回任何值,只是返回了生成對象
  • 列表解析式構造并返回一個新列表

?

集合解析式

語法

  • {返回值 for 元素 in 可迭代對象 if 條件}
  • 列表解析式的中括號[ ]換成大括號{ }
  • 立即返回一個集合

示例:

            
              a = {(x,x+1) for x in range(10)}
print(a)
            
          

輸出:

            
              {(0, 1), (1, 2), (7, 8), (6, 7), (5, 6), (4, 5), (8, 9), (9, 10), (2, 3), (3, 4)}
            
          

?注意,集合解析式中不能出現列表等不可hash的元素,否則編譯器報錯

?

字典解析式

語法

  • {返回值 for 元素 in 可迭代對象 if 條件}
  • 列表解析式的中括號[ ]換成大括號{ }
  • 使用key:value形式
  • 立即返回一個字典

?

示例:

            
              a = {x:(x,x+1) for x in range(5)}
b = {x:[x,x+1] for x in range(5)}
c = {(x,):[x,x+1] for x in range(5)}
print(a)
print(b)
print(c)
            
          

輸出:

            
              {0: (0, 1), 1: (1, 2), 2: (2, 3), 3: (3, 4), 4: (4, 5)}
{0: [0, 1], 1: [1, 2], 2: [2, 3], 3: [3, 4], 4: [4, 5]}
{(2,): [2, 3], (0,): [0, 1], (3,): [3, 4], (1,): [1, 2], (4,): [4, 5]}
            
          

注意,字典解析式中的key不能出現列表等不可hash的元素,否則編譯器報錯


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 91手机在线视频观看 | 日韩精品中文字幕视频一区 | 男女日比| 视频一区在线 | 天天看高清特色大片 | 澳门特级 片免费观看视频 久草最新在线 | 涩涩小网站 | 五月天网址| 人人爱人人草 | 欧美激情精品久久久久久变态 | 青娱乐综合| 国产日韩欧美精品 | 精品国产一区二区亚洲人成毛片 | 国产日韩精品视频 | 午夜小视频免费 | 电视剧全部免费观看 | 露娜同人18av黄漫网站 | 欧美性生交zzzzzxxxxx | 欧美日韩一区不卡 | 欧美精品亚洲一区二区在线播放 | 一级毛片一级毛片一级毛片一级毛片 | 色拍拍欧美视频在线看 | 免费观看日韩大尺码观看 | 精品欧美乱码久久久久久 | 日韩三级伦理在线 | 国产成人免费 | 老头巨大校花体内驰骋小说文 | 在线成人 | 国产精品观看在线亚洲人成网 | 免费精品美女久久久久久久久久 | 五月婷婷啪 | 久久男人的天堂 | 美女视频黄a视频免费全过程 | a在线视频观看 | 欧美成人在线免费 | 国产精品久久久久国产A级 首页亚洲国产丝袜长腿综合 | 嫩草网站 | 成人性a激情免费视频 | 欧美日韩精品一区二区在线线 | 四虎新网站| 高清一区二区在线观看 |