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}
扫码258元购买,加小编(shengxinbaodian)微信号,更可领取优惠券后199元购买。
往期精品(点击图片直达文字对应教程)
后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集