chen7qi的个人博客分享 http://blog.sciencenet.cn/u/chen7qi

博文

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

已有 1518 次阅读 2020-3-30 21:28 |个人分类:生物信息|系统分类:科研笔记

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}




https://blog.sciencenet.cn/blog-118204-1226041.html

上一篇:Bioconda软件安装神器:多版本并存、环境复制、环境导出
下一篇:软件安装不上,可能是网速慢!Conda/R/pip/brew等国内镜像大全拿走不谢~~
收藏 IP: 114.250.123.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-24 05:21

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部