真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

python隊(duì)列長度函數(shù),怎么用python計(jì)算序列長度

Python如何計(jì)算序列長度

根據(jù)你之前的問題,假定你的數(shù)據(jù)符合這種格式:

網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信平臺小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了武威免費(fèi)建站歡迎大家使用!

SeqName1

Seq1

SeqName2

Seq2

...

這里不要求Seq1只占一行(即允許其中有換行符出現(xiàn))。假如Seq總是只占一行的話,其實(shí)就是奇數(shù)行是名字,偶數(shù)行是序列本體而已,讀取不要太簡單……

以下是簡單的實(shí)現(xiàn)??紤]到文件可能很大,使用迭代來逐個(gè)讀入數(shù)據(jù)。文件較小的情況可以使用列表表達(dá)式直接實(shí)現(xiàn)- -。

遍歷文件時(shí)的流程:

如當(dāng)前行以''開始,將其存為k(序列名稱),直到發(fā)現(xiàn)下一個(gè)序列名稱為止的所有行,填入v(序列)。再次發(fā)現(xiàn)''開始的行時(shí),將(k, v)存入字典,并將v清空。此外的是實(shí)現(xiàn)細(xì)節(jié)。注釋之后太啰嗦了,對哪里有疑問請追問。

fileFa?=?open("SEQ.FASTA",?"r")

dic,?k,?v?=?{},?'',?[]

for?i?in?fileFa:

if?i.startswith(''):?

dic[k]?=?v?

k?=?i[1:-1]?

v?=?[]

else:

v.append(i)

dic[k]?=?v

dic.pop('')

print?"%s?sequences?in?total"?%?len(dic)

for?(k,?v)?in?dic.items():

print("SEQUENCE:?%s\nLENGTH:%s"?%?(k,?sum(map(len,?v))))

使用你上一問題提供的4個(gè)序列,輸出如下:

4?sequences?in?total

SEQUENCE:?qwe56_44514

LENGTH:98

SEQUENCE:?qwe56_44606

LENGTH:82

SEQUENCE:?qwe56_44424

LENGTH:43

SEQUENCE:?qwe56_869

LENGTH:39

Python Queue 入門

Queue 叫隊(duì)列,是數(shù)據(jù)結(jié)構(gòu)中的一種,基本上所有成熟的編程語言都內(nèi)置了對 Queue 的支持。

Python 中的 Queue 模塊實(shí)現(xiàn)了多生產(chǎn)者和多消費(fèi)者模型,當(dāng)需要在多線程編程中非常實(shí)用。而且該模塊中的 Queue 類實(shí)現(xiàn)了鎖原語,不需要再考慮多線程安全問題。

該模塊內(nèi)置了三種類型的 Queue,分別是 class queue.Queue(maxsize=0) , class queue.LifoQueue(maxsize=0) 和 class queue.PriorityQueue(maxsize=0) 。它們?nèi)齻€(gè)的區(qū)別僅僅是取出時(shí)的順序不一致而已。

Queue 是一個(gè) FIFO 隊(duì)列,任務(wù)按照添加的順序被取出。

LifoQueue 是一個(gè) LIFO 隊(duì)列,類似堆棧,后添加的任務(wù)先被取出。

PriorityQueue 是一個(gè)優(yōu)先級隊(duì)列,隊(duì)列里面的任務(wù)按照優(yōu)先級排序,優(yōu)先級高的先被取出。

如你所見,就是上面所說的三種不同類型的內(nèi)置隊(duì)列,其中 maxsize 是個(gè)整數(shù),用于設(shè)置可以放入隊(duì)列中的任務(wù)數(shù)的上限。當(dāng)達(dá)到這個(gè)大小的時(shí)候,插入操作將阻塞至隊(duì)列中的任務(wù)被消費(fèi)掉。如果 maxsize 小于等于零,則隊(duì)列尺寸為無限大。

向隊(duì)列中添加任務(wù),直接調(diào)用 put() 函數(shù)即可

put() 函數(shù)完整的函數(shù)簽名如下 Queue.put(item, block=True, timeout=None) ,如你所見,該函數(shù)有兩個(gè)可選參數(shù)。

默認(rèn)情況下,在隊(duì)列滿時(shí),該函數(shù)會(huì)一直阻塞,直到隊(duì)列中有空余的位置可以添加任務(wù)為止。如果 timeout 是正數(shù),則最多阻塞 timeout 秒,如果這段時(shí)間內(nèi)還沒有空余的位置出來,則會(huì)引發(fā) Full 異常。

當(dāng) block 為 false 時(shí),timeout 參數(shù)將失效。同時(shí)如果隊(duì)列中沒有空余的位置可添加任務(wù)則會(huì)引發(fā) Full 異常,否則會(huì)直接把任務(wù)放入隊(duì)列并返回,不會(huì)阻塞。

另外,還可以通過 Queue.put_nowait(item) 來添加任務(wù),相當(dāng)于 Queue.put(item, False) ,不再贅述。同樣,在隊(duì)列滿時(shí),該操作會(huì)引發(fā) Full 異常。

從隊(duì)列中獲取任務(wù),直接調(diào)用 get() 函數(shù)即可。

與 put() 函數(shù)一樣, get() 函數(shù)也有兩個(gè)可選參數(shù),完整簽名如下 Queue.get(block=True, timeout=None) 。

默認(rèn)情況下,當(dāng)隊(duì)列空時(shí)調(diào)用該函數(shù)會(huì)一直阻塞,直到隊(duì)列中有任務(wù)可獲取為止。如果 timeout 是正數(shù),則最多阻塞 timeout 秒,如果這段時(shí)間內(nèi)還沒有任務(wù)可獲取,則會(huì)引發(fā) Empty 異常。

當(dāng) block 為 false 時(shí),timeout 參數(shù)將失效。同時(shí)如果隊(duì)列中沒有任務(wù)可獲取則會(huì)立刻引發(fā) Empty 異常,否則會(huì)直接獲取一個(gè)任務(wù)并返回,不會(huì)阻塞。

另外,還可以通過 Queue.get_nowait() 來獲取任務(wù),相當(dāng)于 Queue.get(False) ,不再贅述。同樣,在隊(duì)列為空時(shí),該操作會(huì)引發(fā) Empty 異常。

Queue.qsize() 函數(shù)返回隊(duì)列的大小。注意這個(gè)大小不是精確的,qsize() 0 不保證后續(xù)的 get() 不被阻塞,同樣 qsize() maxsize 也不保證 put() 不被阻塞。

如果隊(duì)列為空,返回 True ,否則返回 False 。如果 empty() 返回 True ,不保證后續(xù)調(diào)用的 put() 不被阻塞。類似的,如果 empty() 返回 False ,也不保證后續(xù)調(diào)用的 get() 不被阻塞。

如果隊(duì)列是滿的返回 True ,否則返回 False 。如果 full() 返回 True 不保證后續(xù)調(diào)用的 get() 不被阻塞。類似的,如果 full() 返回 False 也不保證后續(xù)調(diào)用的 put() 不被阻塞。

queue.Queue() 是 FIFO 隊(duì)列,出隊(duì)順序跟入隊(duì)順序是一致的。

queue.LifoQueue() 是 LIFO 隊(duì)列,出隊(duì)順序跟入隊(duì)順序是完全相反的,類似于棧。

優(yōu)先級隊(duì)列中的任務(wù)順序跟放入時(shí)的順序是無關(guān)的,而是按照任務(wù)的大小來排序,最小值先被取出。那任務(wù)比較大小的規(guī)則是怎么樣的呢。

注意,因?yàn)榱斜淼谋容^對規(guī)則是按照下標(biāo)順序來比較的,所以在沒有比較出大小之前 ,隊(duì)列中所有列表對應(yīng)下標(biāo)位置的元素類型要一致。

好比 [2,1] 和 ["1","b"] 因?yàn)榈谝粋€(gè)位置的元素類型不一樣,所以是沒有辦法比較大小的,所以也就放入不了優(yōu)先級隊(duì)列。

然而對于 [2,1] 和 [1,"b"] 來說即使第二個(gè)元素的類型不一致也是可以放入優(yōu)先級隊(duì)列的,因?yàn)橹恍枰容^第一個(gè)位置元素的大小就可以比較出結(jié)果了,就不需要比較第二個(gè)位置元素的大小了。

但是對于 [2,1] 和 1 [2,"b"] 來說,則同樣不可以放入優(yōu)先級隊(duì)列,因?yàn)樾枰容^第二個(gè)位置的元素才可以比較出結(jié)果,然而第二個(gè)位置的元素類型是不一致的,無法比較大小。

綜上,也就是說, 直到在比較出結(jié)果之前,對應(yīng)下標(biāo)位置的元素類型都是需要一致的 。

下面我們自定義一個(gè)動(dòng)物類型,希望按照年齡大小來做優(yōu)先級排序。年齡越小優(yōu)先級越高。

本章節(jié)介紹了隊(duì)列以及其常用操作。因?yàn)殛?duì)列默認(rèn)實(shí)現(xiàn)了鎖原語,因此在多線程編程中就不需要再考慮多線程安全問題了,對于程序員來說相當(dāng)友好了。

Python對queue類進(jìn)行修改,隊(duì)尾位于list末端

Queue.Queue類即是一個(gè)隊(duì)列的同步實(shí)現(xiàn)。隊(duì)列長度可為無限或者有限。

可通過Queue的構(gòu)造函數(shù)的可選參數(shù)maxsize來設(shè)定隊(duì)列長度。如果maxsize小于1就表示隊(duì)列長度無限。


標(biāo)題名稱:python隊(duì)列長度函數(shù),怎么用python計(jì)算序列長度
網(wǎng)頁鏈接:http://weahome.cn/article/dsedsop.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部