Python语法糖之:列表解析、集合解析和字典解析
☆
NGS系列文章包括NGS基礎、轉錄組分析?(Nature重磅綜述|關于RNA-seq你想知道的全在這)、ChIP-seq分析?(ChIP-seq基本分析流程)、單細胞測序分析?(重磅綜述:三萬字長文讀懂單細胞RNA測序分析的最佳實踐教程 (原理、代碼和評述))、DNA甲基化分析、重測序分析、GEO數據挖掘(典型醫學設計實驗GEO數據分析 (step-by-step) - Limma差異分析、火山圖、功能富集)等內容。
Python的列表解析 (list comprehensions)是在Python?2.0以來一直都有的功能,特別簡潔、實用。而字典解析雖然曾經在Python 2.3版本中引入過,但后來因為與dict構造器功能相近而被取消,在Python?2.7和3.0之后才再次加入,體驗了下,確實也比較方便。演示如下:
列表解析
numL = [-2, -1, 0, 1, 2]# for循環遍歷列表,并做平方運算 num_squareL = [] for i in numL:num_squareL.append(i**2)num_squareL # [4, 1, 0, 1, 4]# 使用列表解析一句話的事,變化了下寫作順序,從for讀起,第一個空格前為返回值 num_squareL = [i**2 for i in numL]num_squareL # [4, 1, 0, 1, 4]# 加一個If判斷 # 獲取奇數 # %取余數,脫離小學這么久,不寫程序的人一般要反應下啥是取余數 odd_num_squareL = [i**2 for i in numL if i%2]odd_num_squareL# [1, 1]# 加一個If判斷 # 獲取奇數 [i**2 for i in numL if i%2==1]# [1, 1]# 加一個If判斷 # 獲取偶數 [i**2 for i in numL if i%2==0]# [4, 0, 4]上一步的輸出結果竟然是404,訪問網站時最不喜歡見到的標識!(想起來有一次去一位老師的辦公室拜訪,結果門牌號是404,跟我們網站開發工程師對視一笑,”這個老師要找不到了~~”。好在網站開發工程師經驗豐富,開發的網站不會有404,后來也確實合作發表了數據庫的Nucleic Acids Research文章。)
集合解析
把列表解析的[替換為{即可,集合自帶去重?(chong不是zhong)屬性。
numS = set(numL)numS # {-2, -1, 0, 1, 2}num_squareS = {i**2 for i in numS}# 少了一部分 num_squareS # {0, 1, 4}字典解析
把列表解析的[替換為{,返回值是key:value形式。字典的key需唯一。
沒有字典解析時,生成一個字典可以是下面這樣寫法:
[(i,i**2) for i in numL] # [(-2, 4), (-1, 1), (0, 0), (1, 1), (2, 4)]numDict = dict([(i,i**2) for i in numL])numDict # {-2: 4, -1: 1, 0: 0, 1: 1, 2: 4}有了字典解析后,一個{替換了構造函數dict和列表解析[。
numDict = {i:i**2 for i in numL}numDict # {-2: 4, -1: 1, 0: 0, 1: 1, 2: 4}numDict = {i:i**2 for i in numL if i>=0}numDict # {0: 0, 1: 1, 2: 4}numDict = {i**2:i for i in numL}# 重復key的覆蓋 numDict # {4: 2, 1: 1, 0: 0}移除一部分Key?(不過怎么看著都別扭,可能之前沒用過,也可能可讀性確實不好,倒是可以少寫if判斷了,直接從key里面扣除了)
numDict = {i:i**2 for i in numDict.keys() - [1,2]} # numDict = {i:i**2 for i in (numDict.keys() - [1,2])}numDict # {0: 0, 4: 16}總結
以上是生活随笔為你收集整理的Python语法糖之:列表解析、集合解析和字典解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ngs File Type Transf
- 下一篇: 三大开源生信基础教程和视频课程