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}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生信宝典

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值