龙空技术网

Python语法糖之:列表解析、集合解析和字典解析

生信宝典 80

前言:

眼前各位老铁们对“python 判断列表”大致比较注意,看官们都想要分析一些“python 判断列表”的相关文章。那么小编在网摘上收集了一些对于“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.73.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 判断列表