<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
在Python中有非常多且好用的技巧,其中使用最多的是列表生成式,往往可以將複雜的邏輯用簡單的語言來實現,本文重點介紹列表生成式應用的八重境界。
閒話少說,我們直接開始吧!
最最簡單的列表生成式,舉例如下:
a = [1, 2, 3] b = [n*2 for n in a] # b = [2, 4, 6]
上述程式碼實現了對列表中單個元素求平方的操作。
其實,我們可以在列表生成式中新增if來獲取我們需要的元素,舉例如下:
a = [1, 2, 3, 4, 5] b = [n for n in a if n<4] # b = [1, 2, 3]
上述程式碼中,我們新增了一個條件來決定在列表生成式中應該保留哪些元素。這裡我們的條件是,如果n<4,則只保留小於4的數。
我們知道,列舉函數enumerate()可以同時生成元素以及相應的元素的索引。如果我們需要元素的索引以及元素,我們可以在列表生成式中使用函數enumerate()。
舉例如下:
a = ["apple", "orange", "pear"] b = [(i,fruit) for i,fruit in enumerate(b)] # b is [(0,"apple"), (1,"orange"), (2,"pear")]
更進一步,我們知道函數zip()可以非常方便地使我們同時遍歷2個或多個列表。
在列表生成式中加入函數zip(),樣例如下:
a = ["apple", "orange", "pear"] a2 = ["pie", "juice", "cake"] b = [i+j for i,j in zip(a, a2)] # b is ["applepie", "orangejuice", "pearcake"]
三元運運算元A if condition else B允許我們根據條件將每個元素轉換為其他元素。
在列表生成式中同樣可以使用三目運運算元,樣例如下:
a = [56, 45, 76, 23] b = [("pass" if n>=50 else "fail") for n in a] # b is ["pass", "fail", "pass", "fail"]
其實,我們當然也可以在列表生成式中使用巢狀迴圈,我們來看個例子,如下:
a = [10, 20, 30] a2 = [1, 2, 3] b = [i+j for i in a for j in a2] # b is [11, 12, 13, 21, 22, 23, 31, 32, 33]
實質上,上述實現等價程式碼如下:
newlist = [] for i in a: for j in a2: newlist.append( i+j )
更高階一點,我們可以在列表生成式中巢狀列表生成式,舉例如下:
a = [1, 2, 3] b = [[i for i in range(1, n+1)] for n in a] # b is [[1], [1, 2], [1, 2, 3]]
最後的最後,讓我們將上述介紹的幾個技巧進行合併,我們來看如下例子:
a = [1, 2, 3, 4, 5] b = [[xx if xx>yy else yy for xx in range(x) for yy in range(y)] for i,(x,y) in enumerate(zip(a, a[::-1])) if i%2==0] # [[0, 1, 2, 3, 4], [0, 1, 2, 1, 1, 2, 2, 2, 2], [0, 1, 2, 3, 4]]
上述實現意義不大,我們嘗試應用上了上面介紹的所有技巧,但是畢竟程式碼可讀性太大。其主要目的還是為了說明我們可以結合多種技巧,來使我們的列表生成式實現更加強大的功能。
好吧,我們來看個實際的應用例子吧!
假設我們班級上有如下同學資訊:
students = [ ("bob", "m", [67, 89, 60]), ("alice", "f", [97, 85, 61]), ("cassie", "f", [78, 91, 89]), ("tim", "m", [47, 57, 24]), ("tom", "m", [91, 79, 72]), ]
上述列表展示了每個學生的姓名、性別和考試成績,這裡假設如果一個學生的平均分數≥ 50,那麼這個學生有資格獲獎。這裡我們需要編寫程式碼,來找到上述列表中有資格獲獎的男生。
樣例程式碼如下:
x = [(name, "eligible" if sum(scores)/len(scores) >=50 else "not eligible") for name,gender,scores in students if gender=="m"] #[('bob', 'eligible'), ('tim', 'not eligible'), ('tom', 'eligible')]
本文重點介紹了理解Python中的列表生成式的八重境界,並給出了相應的程式碼範例。
以上就是一文帶你瞭解Python列表生成式應用的八重境界的詳細內容,更多關於Python列表生成式的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45