python序列(八)列表推導式實列


1.列表推導式列表推導能非常簡潔的構成一個新列表:只用一條簡潔的表達式即可對得到的元素進行轉換變形。

   格式:[表達式 for 變量 in 列表]或[表達式 for 變量 in 列表 if 條件]

   過濾條件可有可無,取決於實際應用,只留下表達式

>>> list =[x*x for x in range(10)] 相當於 >>> alist= [] >>> for x in range(10): 也相當於 >>> list= list(map(lambda x:x*x,range(10)))

2.阿凡提與國王比賽下棋,國王說要是izji輸了的話阿凡提想要什么他都可以拿的出來。阿凡提說那就要點米吧,棋盤一共64個小格子,在第三個格子里放四粒米,第四個格子里放8粒米,以此類推,后面每個格子里的米都是前一個格子里的2倍,一直把64個格子都放滿。需要多少粒米?

>>> sum([2**i for i in range(64)]) 18446744073709551615

3.使用列表推導式實現嵌套列表的平鋪

>>> vec=[[1,2,3],[4,5,6],[7,8,9]] >>> [num for elem in vec for num in elem] [1, 2, 3, 4, 5, 6, 7, 8, 9]
相當於
>>> vec=[[1,2,3],[4,5,6],[7,8,9]] >>> result =[] >>> for elem in vec:   for num in elem:   result.append(num) >>> result [1,2,3,4,5,6,7,8,9]

4,如果不使用列表推導式,可以這樣做。

>>> vec=[[1,2,3],[4,5,6],[7,8,9]] >>> sum(vec,[]) [1, 2, 3, 4, 5, 6, 7, 8, 9]

>>> vec=[[1,2,3],[4,5,6],[7,8,9]]
>>> from itertools import chain
>>> list(chain(*vec))
[1, 2, 3, 4, 5, 6, 7, 8, 9]

5.列出當前文件夾下所有python源文件

 

>>> import os >>> [filename for filename in os.listdir('.')if filename.endswith(('.py','.pyw'))]

過濾不符合條件的元素
>>> list = [-1,-4,6,7,5,-2,3,9,-11]
>>>
>>> [i for i in list if i>0]
[6, 7, 5, 3, 9]

6.已知有一個包含一些同學成績的字典,計算成績的最高分、最低分、平均分,並查找所有最高分同學。

 

>>> scores={"zhangsan":45,"lisi":78,"wangwu":40,"zhouliu":96,"zhaoqi":65,"sunba":90,"zhengjiu":78,"wushi":99,"dongshiyi":60} >>> heighest=max(scores.values()) >>> lowest = min(scores.values())>>> average=sum(scores.values())*1.0/len(scores)
>>> heighest,lowest,average (99, 40, 72.33333333333333) >>> heighestPerson=[name for name,score in scores.items()if score == heighest] >>> heighestPerson ['wushi']

7.在列表推導式中使用多個循環,實現多序列元素組合,並且可以結合條件語句過濾特定元素

>>> [(x,y)for x in range(3) for y in range(2)] [(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)] >>> [(x,y) for x in [1,2,3]for y in [3,1,4]if x!=y] [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM