詳細(xì)了解python基本數(shù)據(jù)類(lèi)型

一下是我個(gè)人的Python筆記,由于是初學(xué)者,因此內(nèi)容很詳細(xì)。
在學(xué)習(xí)Python之前,最主要的是要弄明白我們Python有那些數(shù)據(jù)對(duì)象,以及他們的特點(diǎn),操作方式等。是進(jìn)一步學(xué)習(xí)的基礎(chǔ)。
Python具有自己獨(dú)特的基礎(chǔ)數(shù)據(jù)結(jié)構(gòu):“sequence”。sequence包括一些其他的數(shù)據(jù)類(lèi)型,其中string是有序的字符串序列;其他的sequence還有l(wèi)ist和tuple。這些數(shù)據(jù)類(lèi)型有相同的特點(diǎn)。sequence數(shù)據(jù)中的元素有順序,可以建立索引index,sliced,interated。除了sequence還有其他的無(wú)序的數(shù)據(jù)類(lèi)型,dictionaries和sets,dictionaries存儲(chǔ)的是key和value之間的關(guān)系;set只是存儲(chǔ)無(wú)序的value的集合。

sequence相關(guān)的數(shù)據(jù)類(lèi)型

strings字符串

字符串相關(guān)的函數(shù):
替換 replace()

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

計(jì)數(shù) count()

#計(jì)算CG含量
>>> c=DNAseq.count("C")
>>> g=DNAseq.count("G")
>>> float(c+g)/len(DNAseq)*100
42.857142857142854

find(),找不到輸出-1;index()找不到報(bào)錯(cuò)
split(",")將字符串分割為list;join()用法相反

>>>  "i am a girl !".split()
['i', 'am', 'a', 'girl', '!']
>>> ";".join(["A","C","A","T"])
'A;C;A;T'

lists 是python中的主力數(shù)據(jù)類(lèi)型

list是通用的對(duì)象類(lèi)型。是一系列向量的有序集合。['A','T','C',''G],這里有四個(gè)向量,list里可以包含不同的數(shù)據(jù)類(lèi)型。一個(gè)list中可以包含其他list這里和R很類(lèi)似。

#構(gòu)建空l(shuí)ist,我們可以向其中添加其他向量
>>> empty_list=[]

list的初始化,如果提前知道要構(gòu)建的list包含多少個(gè)元素,可以這樣構(gòu)建

>>> codons=[None]*5
>>> codons
[None,None,None,None,None]

list的理解式 ,可以從另一種方式去定義一個(gè)list,一個(gè)list可以從另一個(gè)list中定義出來(lái)。
和集合的公式定義一樣,除了枚舉法定義list也可以利用理解式定義list

>>> A=[0,1,2,3,4,5]
>>> [3*x for x in A]
[0, 3, 6, 9, 12, 15]

函數(shù)也可以用來(lái)理解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語(yǔ)言的用法很像,只不過(guò)注意是從0開(kāi)始計(jì)數(shù)。

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

=不能實(shí)現(xiàn)拷貝函數(shù),一旦源list發(fā)生變化,拷貝后的數(shù)據(jù)也會(huì)發(fā)生變化,可以用copy model,或者用b=a[:],可以用來(lái)拷貝a到b。
list比較靈活,三種方式加元素:可以加(append加在末尾)插入(insert)擴(kuò)展(extend:添加一個(gè)list到list末尾)里面的元素,有點(diǎn)類(lèi)似與加號(hào)的效果(+)。
三種方式減元素:pop(元素標(biāo)號(hào)),remove(元素),del

Tuples

tuples是一種不會(huì)改變的list,Python的對(duì)象通常分為變和不變兩種。
point=(1,2,3)
tuples的處理速度要更快。

Sequence的一般性質(zhì)

indexing,獲得list或者strings中的元素,也可以嵌套選擇元素

>>> seqdata=["abcdf",3,"sdreg"]
>>> seqdata[0][1]
'b'

Slicing

可以選擇sequence中的一部分元素。這里選擇的元素標(biāo)簽和以往的形式不一樣。這里的標(biāo)簽指代隔離元素的柵欄。


image.png
>>> mysequence="python"
>>> mysequence[0:2]
'py'
>>> mysequence[4:]
'on'
#還有第三個(gè)指標(biāo),這個(gè)指標(biāo)表明跳躍選擇
>>> 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都可以用+進(jìn)行連接,但是必須是同一類(lèi)型的數(shù)據(jù)

len(長(zhǎng)度),max(最大),min(最小)

將sequence轉(zhuǎn)換為list

>>> list("abcd")
['a', 'b', 'c', 'd']

這里提供了一種方法可以間接的修改string,因?yàn)閟tring是無(wú)法直接修改的。然后再轉(zhuǎn)為sequence,用join(),但是其實(shí)不是很高效。

Dictionaries

mapping映射,通過(guò)名字召喚值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只有不變對(duì)象,string,tuple和數(shù)字能夠當(dāng)。
dict()能夠用來(lái)創(chuàng)建字典

>>> 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'}
#有時(shí)需要?jiǎng)?chuàng)建空的字典,然后加入key和value
>>> rgb={}
>>> rgb['red']='ff000'
#加入新的key
>>> rgb['s']='Ser'

字典的操作函數(shù):IUPAC.keys(),IUPAC.values()
這里函數(shù)Python3.x的返回值是一種新的對(duì)象叫dict view

>>> 'Z' in IUPAC
False
>>> IUPAC.items()
dict_items([('A', 'ALA'), ('C', 'CYS'), ('G', 'GLU')])
#返回的是一個(gè)list包含一個(gè)個(gè)有key和value組成的tuple元組
>>> list(IUPAC.values())
['CYS', 'GLU']
#可以轉(zhuǎn)變?yōu)閘ist

通過(guò)key對(duì)于字典值value的安全訪問(wèn)函數(shù):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'}

字典相關(guān)的函數(shù)方法:


image.png

這里有一點(diǎn)值得注意的是,dict view類(lèi)型的數(shù)據(jù)在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

是無(wú)序的對(duì)象的集合

這個(gè)set也不是在其他的語(yǔ)言中常見(jiàn)的形式。即使在python中也不是很常用。set是數(shù)學(xué)中常見(jiàn)的結(jié)果。和list很像,但是有兩個(gè)突出的差異:元素是無(wú)序的,而且不重復(fù)
這里的集合常用于各種數(shù)學(xué)上的集合操作。

創(chuàng)建集合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中有創(chuàng)建集合的新語(yǔ)法,和數(shù)學(xué)上集合的創(chuàng)建一樣

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

也可以通過(guò)理解創(chuàng)建集合(數(shù)學(xué)上的公式法)。因?yàn)榧蠠o(wú)法添加重復(fù)性元素,隱私當(dāng)你添加一個(gè)重復(fù)性元素是也沒(méi)有影響。因此常用來(lái)對(duì)list數(shù)據(jù)進(jìn)行去冗余。

>>> {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和-
  • 對(duì)稱(chēng)差異symmetric difference和^


    image.png

和其他數(shù)據(jù)類(lèi)型共享的操作

max,min,len,in
list()轉(zhuǎn)換為list型數(shù)據(jù)

固定的集合:Frozenset()

這種固定的數(shù)據(jù)類(lèi)型無(wú)法用remove()和add()等函數(shù)去操作。而且可以作為字典的key

給一個(gè)變量賦予一個(gè)值,以及給一個(gè)對(duì)象綁定一個(gè)名字

這里有一種賦值的特殊情況需要注意:

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

原因可有下圖理解,這里a在第二次賦值時(shí)就已經(jīng)破壞了原來(lái)的賦值,這里的a已經(jīng)不是原來(lái)的a了,因此后面不會(huì)變。


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,并沒(méi)有被破壞,只是被改變了,因此后面d中的c會(huì)隨著c的變化而變化。


image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容