Python 学习笔记-基础数据结构介绍

Python 学习笔记-1

  • 写在最前面,因为组内小伙伴要走,生信团队由原来的7个人,慢慢的变的只有我一个人了,需要紧急突击下python,因为有python的流程要交接维护

python 基本情况

  • 代码块的结构使用缩进进行区分,这下倒是不用担心忘记末尾的结束标志“;”了;但是引入了一个小问题,更改复杂代码时,结构调整的问题
  • 面向对象编程,强调代码的复用行和跨脚本的调用
  • 丰富的资源库是个保障
  • 现在处于上升期,比较活跃,比如我想进行邮件的解析,python找到的起码是18,19年的分享,但是perl的都是08,10年的
  • 跟perl和R一样,使用#进行注释,注释重要信息是很重要的代码编程习惯,有助于提高可读性和降低维护代码难度,增加团队协作的流畅性

python 基本数据类型

常量

  • 不能改变,具备字面的意义
    • 数值型
      • 数值类型
        2 # 整型 int
        2.11 # 浮点型 float
        2.3-4.5j # 复数 complex
        
      • 数值类型转化
        type(2) # 使用type可以返回其类型,该例中返回int
        float(2)# 前面直接加类型,可以进行可以转化的相互的转化,该例中返回2.0;float,int,str
        
      • 数字运算
        3+2
        3-5
        3*4
        3/4 # 这里要说明一下,在python2中,两个整型数字相除,得到的是整数,python3中,得到的是浮点数,这一点python3中的做法,更合理,主要是跟perl中一至,哈哈
        
        
      • 判断
        3>4 ## False
        3<=4 ## True
        3==3 ## True 仅对刚开始接触编程的小伙伴提醒一下,几乎所以编程语言中相等的判断都是用双等号的,因为“=”一般用于赋值了
        
        
    • 字符串型
      • 引号(单双引号的用法一致)之间的符号集,包括字母,数字,下划线,空格,制表符等
      • 这里有一点,因为python中换行就代表新的语句,所以引入了三单引号和三双引号的换行不换新变量或者语句的语法,个人感觉这个好像md语法中的(```)表示代码块的一种用法
        a = '''
        sfdg
        dfg
        '''
        
      • 运算操作
        • 连接
          a = "liubei " " is learning " "python "
          a = "liubei " + " is learning " + "python "
          # 上述结果相同,但是一般使用下面的方法,可读性更好,便于维护
          # 因为连接时默认没有任何连接符号,所以需要显示的加入空格等你想使用的分割符号
          
        • 分割
          b=a.split(" ")
          print(b)
          # ['liubei', '', 'is', 'learning', 'python']
          # 以空格为分隔符,将a分割为列表;当然根据实际需要分隔符可以是任意的字母数据及其他符号或组合
          
          
        • 去除一些字母符号等
          b=a.strip(' ')
          # 去除a任意两端的空格给到b变量;注意这里的a的值并不会因此发生改变,并且strip可以是字母,空格,下划线等,但是不能是空
          c=a.lstrip(" ") # 去除a左端的空格,因为a左端没有空格,所以c与a实际是一致的
          d=a.rstrip(" ") # 去除a右端的空格
          ## 注意上述情况,不管多少个要去除的边际的东西,一次性全部去除完
          
        • 替换
          e=a.replace("i",'') # 将a中所有i替换掉,a本身并不会发上改变
          f=a.replace("i","",2) # 将a中前两个i替换掉(如果a中不足2个i,全部替换),a本身并不会发上改变,
          
        • 重复
          l=a*3 # l由3个a重复而成,“ liubei  is learning python     liubei  is learning python     liubei  is learning python”
          
          
        • 切片或者说索引
          a[2] # 下标为2的字符,因为python的计数从0开始编码,所以是第三个元素
          a[2:8] # 获得2-8之间的元素,(如果最后一个数字超出元素下标的最大值,直接取到最后,并不会报错)
          a[2:6:3] # 添加了每隔个字符取一个
          a[2:] # 取下标从2开始,之后所有的字符
          a[::-1] # 相当于变量进行了发转,每一个字符都进行了转换,有点像reverse的结果
          
        • 成员判断
          "s" in a # True 判断是否在其中
          "s" not in a # False 判断是否不在其中
          
        • 字母的大小写转化
          a.upper() # 返回全部字母大写的字符串
          a.lower() # 返回全部字母小写的字符串
          a.capitalize() # 返回首字母大写的字符串,并且这个首字母必须是第一个,如果之前有空格的化,会被认为不是首字母,所以不进行转化
          a.center(200,"*") # 返回长度200的居中字符串,并且以*在前后进行空白补充
          
        • 统计,判断
          a.count("o") # 统计‘o’在a中出现的次数
          a.find("o") # 返回第一次出现o的下标,否则返回-1
          a.index("o") # 返回第一次出现o的下标,否则返回异常
          
    • 布尔值(真假)
      • True:真:非0数字,非空列表,非空字典,非空字符串
      • False:假:0,空列表,空字符串,空字典

变量

  • 可以储存信息,同时可以对他们进行操作

  • 命名规则:

    • 标识符的第一个字符必须是字母表中的字母或者下划线
    • 标识符的其他部分可以由字母,数字,下划线组成
    • 区分大小写(即大小写字母差异的表示符被认为是两个变量)
    • python中变量不需要提前申明,可以直接赋值
    • 变量的使用受到结构的限制,在结构内部赋值的变量可能不能在结构外调用,这个后面详细讨论,这里强调下有这个事情
    • 因为没有表示的其他固定用法,所以不能使用python内置的标识符进行赋值如:in,int等
    • 所有编程语言规范里都会要求命名要能看懂其指代的含义,不要出现:a,b,c这种命名,虽然理论上没有问题,但是后续代码的查看,维护是个很大的问题呢,可读性也会很差,不利于交流合作
    • ngs_seq_quality = 20 ## 好的变量名称,明确可以看出是二代测序序列的质量
      a = 20 ## 不好的变量命名,自己半个月后都不知道这个a是个什么鬼东东,更别说别人看的时候的心情
      
  • 变量赋值:

    a = 1  # 数字
    a = 'string' # 字符串
    a = [1,2,'s'] # 列表,即数组的概念
    a = ['a':1,"d":2] # 字典,perl中称为hash,哈希
    x=y=z=1 # 多重赋值,多个变量直接赋值为同一值,这个比perl的用法简单
    x,y,z=1,2,3 # 多元赋值,太爱这个了,可以减少很多行看上去类似的
    ## 变量赋值时自己首先要搞清楚数据类型,这个我现在其实还是有点晕的,准备五一劳动节好好学习,对于使用perl的孩子来说,习惯了自由洒脱的编码风格,不知道后续这个会遇到啥样的好玩的问题了
    ## python中因为变量没有其他的标识符,所以,一旦标量,列表,哈希等使用了相同的单词组合作为变量名称,就会存在最后的覆盖前面的变量的问题,所以命名一定要慎重,并且要先构思好框架,再进行撰写
    
    

python基础数据结构

列表/数组

  • 可以保存任意数字,字符等的有序排列的数组,能通过下标进行数据的索引
array1 = [1,2,3,"a"] # 定义并赋值
len(array1) # 获得列表的长度,即元素个数
array1.sort() # 列表排序
array1.reverse() # 列表反向
array1.append("b") # 列表末尾追加新元素
array1.remove(1) # 列表删除特定元素,只删除遇到的第一个,不删除后面的,并且如果没有该元素会报错,无返回值,数组直接进行的操作
"\t".join(array1) # 以tab键将列表连接,返回字符串
## 这里大部分的用法跟perl相似,sort,reverse,append,len,但是预留字和写法确实有差别

元祖

  • 与列表相似,但是不能修改,一般是一些不允许修改的预留的会使用
  • 适合严格纠错类的测试等的使用

字典

  • 无序,键值对一一映射的关系,键是唯一的,值是可以相同的;这里可以想象成键是每个人的身份证号码,值是名字,身高等,键唯一,值可以相同;通过键可以查到每个数据,但是不能通过值,或者顺序调取
hash={"a":1,"b":2} # 进行一个新的字典的定义并赋值
hash["c"]=3 # 新添加一个键值对,如果键已经存在,会覆盖之前获得的值
del hash["a"] # 删除键为a的键值对
len(hash) # 获得字典的键值对的数量
hash.keys() # 获得字典的所有键值对的键,这里注意下,它返回的并不是一个标准的列表,所以这个实际使用的时候应该还是会有其他问题,需要转化的
hash.values() # 获得字典的所有键值对的值,重复的也会重复的输出
for k,v in hash.items(): # 这里k和v是hash里一一对应的键值对,可能更好理解,应用场景也更好写
for k in hash: # 这里k是hash里的键的遍历,跟perl中的几乎一摸一样,当年perl中hash是很值得骄傲的地方,多位hash,hash的数组,数组的hash非常好用

集合

  • 无序的不重复的元素组成的,由这个性质决定了它很适合进行比较元素的比较,并且与字典的键与某些方面的一致性
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值