Python学习之路和隐藏特征


欢迎关注微信公众号生信宝典:http://mp.weixin.qq.com/s/vDAHTitasAUphWsrS2Uzlg
针对生信领域的零基础爱好者及生信分析中遇到的种种问题,生信领域知名公众号“生信宝典”团队组织了中科院系统项目经验丰富的一线科研人员开展系列培训活动。

小学生都学Python了,你还不知道怎么开始文中介绍了Python的应用广泛,功能强大,提供了Python的在线学习视频和资料等。

学习程序语言不是一件难事,也不是一件简单事。为什么编程这么难中翻译了一篇编程学习的心路历程。

(图例“编程信心与能力”:纵轴为信心值,横轴为能力水平,虚线从左至右依次分割出手牵手蜜月期、混沌悬崖、绝望沙漠、令人兴奋的上升期四个阶段,第5条虚线标志着工作准备就绪)

在我看来,学习编程是学以致用,学习方式是硬着头皮去写。

读文档是蜜月期,读读就过去,谁都会。

写程序是混沌悬崖,知道是这么回事,就是写不出来;

调程序是绝望沙漠,怎么看自己写的都对,就是编译器不开眼;

程序正确了就是兴奋期,万里长征迈出又一步。

这些过程没有捷径,但可以加速,就是我们的零基础Python编程班,应用Python处理生物信息数据和作图

广告做完了,来点Python的特性。

Python编程有其特有的方式 phyonic,下面是python编程一些有意思的用法和技巧,总结出来,以飨大家。

1.原位替换

a = 5
b = 6
c = 7
a, b = b,a
print("a is",a)
print("b is",b)
a is 6
b is 5
a, (b,c) = c, (a,b)
print("a is",a)
print("b is",b)
print("c is",c)
a is 7
b is 6
c is 5
first, *middle_all, last = (1,2,3,4,5,6)
middle_all
[2, 3, 4, 5]

2.链似比较

x = 5
print("1 < x < 10 is", 1 < x < 10)
print("10 > x <= 9", 10 > x <= 9)
1 < x < 10 is True
10 > x <= 9 True

3.列表索引,反序

a = [1,2,3,4,5]
a[::2]
[1, 3, 5]
a[::-1]
[5, 4, 3, 2, 1]

4.列表解析、字典解析、元组解析

# 获得系列坐标点
a = ((i,j) for i in range(3) for j in range(2))
a
<generator object <genexpr> at 0x7fa8d04d7fc0>
for i in a:
    print(i)
(0, 0)
(0, 1)
(1, 0)
(1, 1)
(2, 0)
(2, 1)
str1 = "I love sheng xin bao dian"
print([i for i in str1.split() if i.endswith('n')])
['xin', 'dian']
a = {i:i*2 for i in range(5)}
a
{0: 0, 1: 2, 2: 4, 3: 6, 4: 8}
[(x, y) for x in range(4) if x % 2 == 1 for y in range(4)]
[(1, 0), (1, 1), (1, 2), (1, 3), (3, 0), (3, 1), (3, 2), (3, 3)]

5.集合操作

a = set(["sheng", "xin", "bao","dian","best","tutotials"])
b = set(["hong", "ji", "yin","zu","best","tutotials"])
a | b  # union
{'bao', 'best', 'dian', 'hong', 'ji', 'sheng', 'tutotials', 'xin', 'yin', 'zu'}
a & b # intersection
{'best', 'tutotials'}
a ^ b # Symmetric Difference
{'bao', 'dian', 'hong', 'ji', 'sheng', 'xin', 'yin', 'zu'}

6.Negative round

print("round整数:",str(round(1234.5678, -2)))

print("round小数:",str(round(1234.5678, 2)))
round整数: 1200.0
round小数: 1234.57

7.多行字符串的优雅嵌套

# \可以,但是第二行需要起头
system_command = "s-plot pheatmap -f matrix \
-t heatmap -a TRUE"
print(system_command)
s-plot pheatmap -f matrix -t heatmap -a TRUE
# 字符串中包含换行符
# 切第二行要起头,不然会有较多空格
system_command = """s-plot pheatmap -f matrix
-t heatmap -a TRUE""" 
print(system_command)
print(system_command.replace('\n', ' '))
s-plot pheatmap -f matrix 
-t heatmap -a TRUE
s-plot pheatmap -f matrix  -t heatmap -a TRUE
# 类元组的写法,既可以跨行,又可以自由格式
# 需要注意2点
   # 类元组,无逗号
   # 字符串连接时不会自动加空格,空格需要保存在字符串里面 
system_command = ("s-plot pheatmap -f matrix "
                  "-t heatmap -a TRUE")
print(system_command)
s-plot pheatmap -f matrix -t heatmap -a TRUE
# 多一步join;
system_command = ["s-plot pheatmap -f matrix",
                  "-t heatmap -a TRUE"]
print(' '.join(system_command))
s-plot pheatmap -f matrix -t heatmap -a TRUE

8.zip转换两个列表为字典

keyL = [1,2,3]
valueL = ['a','b','v']
for i ,j in zip(keyL, valueL):
    print(i,j)
1 a
2 b
3 v
import pprint
pprint.pprint(dict(zip(keyL, valueL)))
{1: 'a', 2: 'b', 3: 'v'}
dict([(i,j) for i ,j in zip(keyL, valueL)])
{1: 'a', 2: 'b', 3: 'v'}

9.enumerate索引列表 (不再使用len)

a = ['s','x','b','d']

# Preferred way
for index, item in enumerate(a):
    print(index,item)

print("\n")

# Old way
for i in range(len(a)):
    print(i,a[i])
    
0 s
1 x
2 b
3 d


0 s
1 x
2 b
3 d

10.矩阵转置

a = [(1,2), (3,4), (5,6)]
b = zip(*a)
for i in b:
    print(i)
(1, 3, 5)
(2, 4, 6)

11.sum的另一用法,二维数组秒变1维

aList = [[1, 2, 3], [4, 5], [6], [7, 8, 9]]
sum(aList, [])
[1, 2, 3, 4, 5, 6, 7, 8, 9]

12.解释正则表达式

import re
re.compile("^[a-z]*$", re.DEBUG)
AT AT_BEGINNING
MAX_REPEAT 0 MAXREPEAT
  IN
    RANGE (97, 122)
AT AT_END
re.compile("^[a-z][0-9]+$", re.DEBUG)
AT AT_BEGINNING
IN
  RANGE (97, 122)
MAX_REPEAT 1 MAXREPEAT
  IN
    RANGE (48, 57)
AT AT_END
re.compile("^[a-z]([0-9]+)$", re.DEBUG)
AT AT_BEGINNING
IN
  RANGE (97, 122)
SUBPATTERN 1 0 0
  MAX_REPEAT 1 MAXREPEAT
    IN
      RANGE (48, 57)
AT AT_END

13.for..else;若for循环中未执行break,则else会被执行

found = False
for i in range(2,5):
    if i == 1:
        found = True
        break
if not found: 
    print("i was never 1")
i was never 1
for i in range(2,5):
    if i == 1:
        break
else:
    print("i was never 1")
i was never 1

14.启动网络服务器,用于文件预览或传输

# run in commang line
# python -m http.server 8000
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

15.python打印九九乘法表 (列表解析)

print('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))
1*1=1 
1*2=2  2*2=4 
1*3=3  2*3=6  3*3=9 
1*4=4  2*4=8  3*4=12 4*4=16
1*5=5  2*5=10 3*5=15 4*5=20 5*5=25
1*6=6  2*6=12 3*6=18 4*6=24 5*6=30 6*6=36
1*7=7  2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49
1*8=8  2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64
1*9=9  2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81

16.map, filter

# 过滤大于4的元素
a = [3,4,5]
[i for i in a if i<4]
[3]
list(filter(lambda x: x<4, a))
[5]
# 每个元素加2
[i+2 for i in a]
[5, 6, 7]
map(lambda x: x+2, a)
<map at 0x7fa8d0502358>
list(map(lambda x: x+2, a))
[5, 6, 7]

算2的1000次方的各位数之和

sum(map(int, str(2**1000)))
1366

17.python打印心型

print('\n'.join([''.join([('Love'[(x-y) % len('Love')] if ((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3 <= 0 else ' ') for x in range(-30, 30)]) for y in range(30, -30, -1)]))
                veLoveLov           veLoveLov               
            eLoveLoveLoveLove   eLoveLoveLoveLove           
          veLoveLoveLoveLoveLoveLoveLoveLoveLoveLov         
         veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL        
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
        LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL       
        oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLo       
        veLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLov       
        eLoveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove       
         oveLoveLoveLoveLoveLoveLoveLoveLoveLoveLove        
          eLoveLoveLoveLoveLoveLoveLoveLoveLoveLove         
          LoveLoveLoveLoveLoveLoveLoveLoveLoveLoveL         
            eLoveLoveLoveLoveLoveLoveLoveLoveLove           
             oveLoveLoveLoveLoveLoveLoveLoveLove            
              eLoveLoveLoveLoveLoveLoveLoveLove             
                veLoveLoveLoveLoveLoveLoveLov               
                  oveLoveLoveLoveLoveLoveLo                 
                    LoveLoveLoveLoveLoveL                   
                       LoveLoveLoveLov                      
                          LoveLoveL                         
                             Lov                            
                              v                             
  1. python打印曼德勃罗集合
print('\n'.join([''.join(['*'if abs((lambda a:lambda z,c,n:a(a,z,c,n))(lambda s,z,c,n:z if n==0else s(s,z*z+c,c,n-1))(0,0.02*x+0.05j*y,40))<2 else' 'for x in range(-80,20)])for y in range(-20,20)]))
                                                                                *                   
                                                                                                    
                                                                                                    
                                                                          **                        
                                                                     ***********                    
                                                                    ************                    
                                                                      *********                     
                                                            *    * ************  * *                
                                                    ****** * *************************** *          
                                                    *************************************** *****   
                                                     *******************************************    
                                               *** ******************************************** *   
                                                **************************************************  
                                             *******************************************************
                      *        *              ***************************************************** 
                     **** ******* *          *******************************************************
                      *****************     ******************************************************* 
                   *********************** *********************************************************
                   *********************** ******************************************************** 
             **** ********************************************************************************  
*********************************************************************************************       
             **** ********************************************************************************  
                   *********************** ******************************************************** 
                   *********************** *********************************************************
                      *****************     ******************************************************* 
                     **** ******* *          *******************************************************
                      *        *              ***************************************************** 
                                             *******************************************************
                                                **************************************************  
                                               *** ******************************************** *   
                                                     *******************************************    
                                                    *************************************** *****   
                                                    ****** * *************************** *          
                                                            *    * ************  * *                
                                                                      *********                     
                                                                    ************                    
                                                                     ***********                    
                                                                          **                        

19.打开一个关于Python漫画的网站

import antigravity
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容