python利用集合的无重复性_详细了解python基本数据类型

一下是我个人的Python笔记,由于是初学者,因此内容很详细。

在学习Python之前,最主要的是要弄明白我们Python有那些数据对象,以及他们的特点,操作方式等。是进一步学习的基础。

Python具有自己独特的基础数据结构:“sequence”。sequence包括一些其他的数据类型,其中string是有序的字符串序列;其他的sequence还有list和tuple。这些数据类型有相同的特点。sequence数据中的元素有顺序,可以建立索引index,sliced,interated。除了sequence还有其他的无序的数据类型,dictionaries和sets,dictionaries存储的是key和value之间的关系;set只是存储无序的value的集合。

sequence相关的数据类型

strings字符串

字符串相关的函数:

替换 replace()

>>> DNAseq="TTGCTAG"

>>> mRNAseq=DNAseq.replace("T","U")

>>> mRNAseq

’UUGCUAG’

计数 count()

#计算CG含量

>>> c=DNAseq.count("C")

>>> g=DNAseq.count("G")

>>> float(c+g)/len(DNAseq)*100

42.857142857142854

find(),找不到输出-1;index()找不到报错

split(",")将字符串分割为list;join()用法相反

>>> "i am a girl !".split()

['i', 'am', 'a', 'girl', '!']

>>> ";".join(["A","C","A","T"])

'A;C;A;T'

lists 是python中的主力数据类型

list是通用的对象类型。是一系列向量的有序集合。['A','T','C',''G],这里有四个向量,list里可以包含不同的数据类型。一个list中可以包含其他list这里和R很类似。

#构建空list,我们可以向其中添加其他向量

>>> empty_list=[]

list的初始化,如果提前知道要构建的list包含多少个元素,可以这样构建

>>> codons=[None]*5

>>> codons

[None,None,None,None,None]

list的理解式 ,可以从另一种方式去定义一个list,一个list可以从另一个list中定义出来。

和集合的公式定义一样,除了枚举法定义list也可以利用理解式定义list

>>> A=[0,1,2,3,4,5]

>>> [3*x for x in A]

[0, 3, 6, 9, 12, 15]

函数也可以用来理解list,也可以加入条件句

>>> animals = [' king kong', ' godzilla ', 'gamera ']

#strip()可以删除空格

>>> [y.strip() for y in animals]

['king kong', 'godzilla', 'gamera']

>>> [y.strip() for y in animals if 'i' in y]

['king kong', 'godzilla']

选取list中的值和R语言的用法很像,只不过注意是从0开始计数。

>>> first_list=[1,2,3,4,5]

>>> first_list[0]

1

=不能实现拷贝函数,一旦源list发生变化,拷贝后的数据也会发生变化,可以用copy model,或者用b=a[:],可以用来拷贝a到b。

list比较灵活,三种方式加元素:可以加(append加在末尾)插入(insert)扩展(extend:添加一个list到list末尾)里面的元素,有点类似与加号的效果(+)。

三种方式减元素:pop(元素标号),remove(元素),del

Tuples

tuples是一种不会改变的list,Python的对象通常分为变和不变两种。

point=(1,2,3)

tuples的处理速度要更快。

Sequence的一般性质

indexing,获得list或者strings中的元素,也可以嵌套选择元素

>>> seqdata=["abcdf",3,"sdreg"]

>>> seqdata[0][1]

'b'

Slicing

可以选择sequence中的一部分元素。这里选择的元素标签和以往的形式不一样。这里的标签指代隔离元素的栅栏。

image.png

>>> mysequence="python"

>>> mysequence[0:2]

'py'

>>> mysequence[4:]

'on'

#还有第三个指标,这个指标表明跳跃选择

>>> mysequence="abcdefghijk"

>>> mysequence[1:10:3]

'beh'

##倒序

>>> mysequence="abcdefghijk"

>>> mysequence[1:10:3]

'beh'

成员判断用in

>>> point=(11,12,14)

>>> 11 in point

True

sequence,list, turple都可以用+进行连接,但是必须是同一类型的数据

len(长度),max(最大),min(最小)

将sequence转换为list

>>> list("abcd")

['a', 'b', 'c', 'd']

这里提供了一种方法可以间接的修改string,因为string是无法直接修改的。然后再转为sequence,用join(),但是其实不是很高效。

Dictionaries

mapping映射,通过名字召唤值key:value

>>> IUPAC={'A':'ALA','C':'CYS','G':'GLU'}

#IUPAC是字典的名字

>>> IUPAC['A']

'ALA'

>>> print("c present for the amino acid "+IUPAC['C'])

c present for the amino acid CYS

key只有不变对象,string,tuple和数字能够当。

dict()能够用来创建字典

>>> rgb=[('red','ff0000'),('green','00ff00'),('blue','000ff')]

>>> colors=dict(rgb)

>>> colors['green']

'00ff00'

>>> rgb=dict(red='ff0000',green='00ff00',blue='000ff')

>>> rgb

{'red': 'ff0000', 'green': '00ff00', 'blue': '000ff'}

#有时需要创建空的字典,然后加入key和value

>>> rgb={}

>>> rgb['red']='ff000'

#加入新的key

>>> rgb['s']='Ser'

字典的操作函数:IUPAC.keys(),IUPAC.values()

这里函数Python3.x的返回值是一种新的对象叫dict view

>>> 'Z' in IUPAC

False

>>> IUPAC.items()

dict_items([('A', 'ALA'), ('C', 'CYS'), ('G', 'GLU')])

#返回的是一个list包含一个个有key和value组成的tuple元组

>>> list(IUPAC.values())

['CYS', 'GLU']

#可以转变为list

通过key对于字典值value的安全访问函数:get()

>>> IUPAC.get('A')

'ALA'

>>> IUPAC.get('Z')

>>> IUPAC.get('A','No translation')

'ALA'

>>> IUPAC.get('Z','No translation')

'No translation'

#删除值用del

>>> del IUPAC['A']

>>> IUPAC

{'C': 'CYS', 'G': 'GLU'}

字典相关的函数方法:

image.png

这里有一点值得注意的是,dict view类型的数据在Python3.x中和原字典保持一致,但是在2.x版本中则不是。

>>> d={1:'a',2:'b',3:'c'}

>>> k=d.keys()

>>> k

dict_keys([1, 2, 3])

>>> d[6]='p'

>>> k

dict_keys([1, 2, 3, 6])

Sets

是无序的对象的集合

这个set也不是在其他的语言中常见的形式。即使在python中也不是很常用。set是数学中常见的结果。和list很像,但是有两个突出的差异:元素是无序的,而且不重复

这里的集合常用于各种数学上的集合操作。

创建集合set(),集合中加元素,.add()

>>> first_set=set(['CP0140.1','EF3613.1','EF3616.1'])

>>> first_set=set()

>>> first_set.add('CP0140.1')

>>> first_set.add('EF3613.1')

>>> first_set.add('EF3616.1')

>>> first_set

{'EF3613.1', 'CP0140.1', 'EF3616.1'}

在python3.x中有创建集合的新语法,和数学上集合的创建一样

>>> first_set = {'CP0140.1','EF3613.1','EF3616.1'}

>>> first_set

{'EF3613.1', 'CP0140.1', 'EF3616.1'}

也可以通过理解创建集合(数学上的公式法)。因为集合无法添加重复性元素,隐私当你添加一个重复性元素是也没有影响。因此常用来对list数据进行去冗余。

>>> {2*x for x in [1,1,2,2,3,3]}

{2, 4, 6}

>>> set([2,2,3,4,5,3])

{2, 3, 4, 5}

集合操作

交集intersection和&

>>> other_set=set(['CP0140.2','EF3613.1','EF3616.2'])

>>> common=first_set.intersection(other_set)

>>> common

{'EF3613.1'}

>>> common=first_set & other_set

>>> common

{'EF3613.1'}

并集union 和 |

差difference和-

对称差异symmetric difference和^

image.png

和其他数据类型共享的操作

max,min,len,in

list()转换为list型数据

固定的集合:Frozenset()

这种固定的数据类型无法用remove()和add()等函数去操作。而且可以作为字典的key

给一个变量赋予一个值,以及给一个对象绑定一个名字

这里有一种赋值的特殊情况需要注意:

>>> a=3

>>> b=[1,2,a]

>>> b

[1, 2, 3]

>>> a=5

>>> b

[1, 2, 3]

原因可有下图理解,这里a在第二次赋值时就已经破坏了原来的赋值,这里的a已经不是原来的a了,因此后面不会变。

image.png

但是另一种情况是这样:

>>> c=[1,2,3]

>>> d=[5,6,c]

>>> d

[5, 6, [1, 2, 3]]

>>> c.pop()

3

>>> c

[1, 2]

>>> d

[5, 6, [1, 2]]

可以借助下图理解,这里c仍然叫c,并没有被破坏,只是被改变了,因此后面d中的c会随着c的变化而变化。

image.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值