確定蛋白濃度(三)|自學(xué)生信Python(第二十三天)

確定蛋白濃度(三)

前面兩篇文章已經(jīng)介紹和講解了問題答案代碼的部分含義,下面將進(jìn)行后續(xù)的講解。(建議結(jié)合前面兩篇文章閱讀)

插入和刪除行
在計(jì)算 Lowry 的數(shù)據(jù)時(shí),必須首先去掉標(biāo)簽行。 由于該表存儲(chǔ)為一個(gè)列表,可以使用所有列表支持的操作。 通過切片操作刪去整個(gè)第一行,即保留除第一個(gè)元素以外所有其他元素 :

table = table[1:]

或者,可以使用 pop()方法:

table.pop(0)

記住,索引從 0 開始。 同樣也可以刪除任何其他行,如第三行

table.pop(2)

或者用切片 :

table = table[:2] + table[3:]
類似地,還可以使用列表功能在給定的位置插入新行:

table.insert(2, [0.55,0.123,0.122,0.145])

或者可以在末尾添加一個(gè)新行:

table.append([0.55,0.123,0.122,0.145])

表的添加和刪除用一行代碼就可以完成。

訪問列

嵌套列表方法的缺點(diǎn)是,訪問列不那么簡(jiǎn)單直接,因?yàn)橐涣械臄?shù)據(jù)分布在所有行中。 當(dāng)然,可以在表上運(yùn)行一個(gè)循環(huán)來(lái)收集一列的所有數(shù)據(jù):
protein = []
for row in table:
protein.append(row[])

如果想用這種方法提取多列或訪問相同的列多次,程序?qū)⒆兊煤荛L(zhǎng),難以閱讀。 在 Python 中可以使用更有效的縮寫 :
protein,ext1,ext2,ext3 = zip(table)
zip(
table) 命令把每一列轉(zhuǎn)換為單個(gè)元組變量,從而有效地將表旋轉(zhuǎn) 90°。 此操作雖然語(yǔ)法很短,但需要用一些時(shí)間來(lái)才能完成。 因此對(duì)于大數(shù)據(jù)集,用 for()循環(huán)可能會(huì)更好。

合并多列

四個(gè)列都被存儲(chǔ)在單獨(dú)變量中(含有列表或元組)之后,需要把它們組合成一個(gè)兩列的 表(見表 7.2) 。

加號(hào)(+)和乘法(*)運(yùn)算符在 Python 中可以分別應(yīng)用于列表和元組的合并和乘法。 乘法通過復(fù)制來(lái)擴(kuò)展列表:

protein = protein* 3

這會(huì)導(dǎo)致同樣的數(shù)據(jù)出現(xiàn)三個(gè)相連的副本 :

>>> [1,2,3] * 3 
[1, 2,3,1,2,3,1,2,3] 

加法將兩個(gè)或多個(gè)列表或元組連接為一個(gè):

>>> [1,2,3] + [4,5,6] 
[1,2,3,4,5,6] 

其結(jié)果是包含所有數(shù)據(jù)項(xiàng)的一個(gè)列表或元組,一個(gè)后面跟著另一個(gè):
extinction = ext1+ ext2 + ext3

在前面的程序中,這些行的結(jié)果是通過將這三列消光值合并成一個(gè)單一的列,蛋白質(zhì)列中的信息增加到原來(lái)的三倍,以包含相應(yīng)的值。

問答: 如果將包含不同的數(shù)據(jù)類型的列表組合在一起會(huì)怎樣? Python 并不關(guān)心乘用" 長(zhǎng) "運(yùn)算符或連接用 " + "操作符所計(jì)算列表的內(nèi)容。 例如可以輕 松地創(chuàng)建首先包含數(shù)字之后是字符串的列表。 但是,當(dāng)要對(duì)列表中所有元素使用 for 循環(huán)或 類似 sumO這樣的函數(shù)時(shí),不同的數(shù)據(jù)類型會(huì)導(dǎo)致問題。如果覺得嵌套列表結(jié)構(gòu)不足以達(dá)到 目的,可以考慮使用嵌套字典(見例 7. 2)或類。

zip( )函數(shù)

內(nèi)置的 zip()函數(shù)和星號(hào)究竟如何工作? zip()命令可以將兩個(gè)或多個(gè)列表中的元素一 個(gè)接一個(gè)地相結(jié)合,如

>>> zip( [1,2,3), [4,5,6]) 
[(1,4),(2,5),(3,6)]

其結(jié)果是,每個(gè)輸入列表中的第一個(gè)元素配對(duì)在一起,然后是第二個(gè)元素,以此類推。 zip()函數(shù)的參數(shù)必須是可迭代的(列表,元組,字符串) 。 它返回的結(jié)果是一個(gè)包含數(shù)個(gè)元組的列表,其中第 i 個(gè)元組包含來(lái)自每個(gè)參數(shù)的第 i 個(gè)元素。 例如,前面文章代碼中星號(hào)告訴 zip 函數(shù)使用嵌套列表中的所有列表作為參數(shù),可以寫為

zip (*table)

即,

zip (table [0],table [1],table [2],table [3])

將 zip() 函數(shù)的參數(shù)看成一張表中的行,zip (*table)符號(hào)將表旋轉(zhuǎn) 90° :

>>> data = [[1,2,3],[4,5,6]]
>>> zip (*data) 
[(1,4),(2,5),(3,6)]

總之, zip() 函數(shù)像拉鏈一樣將列表中的各項(xiàng)配對(duì),符號(hào)將所給的變量解釋為每行都是參數(shù)組成的一列。zip()的一個(gè)很常見的用法是旋轉(zhuǎn)(或轉(zhuǎn)置)表*,這使得訪 問表中的列更為輕松。

插入和刪除列

zip() 函數(shù)可以 90°旋轉(zhuǎn)表 :

table = zip (*table)

有了這一招,就可以像對(duì)行一樣對(duì)列進(jìn)行訪問、插入、刪除。 例如,需插入一列就要先轉(zhuǎn)置表,插入一行,最后再將表轉(zhuǎn)置回來(lái) :

table =zip(table)
table.append(['ext4',0,0,0,0,0,0])
table = zip(
table)

該代碼添加一個(gè)額外的第一行帶標(biāo)簽的全零列。 如果想從一個(gè)表中刪除一列,可以使用同樣的方法:

table =zip(table)
table.pop(1)
table = zip(
table)

以上代碼消除了整個(gè)第二列,但這種方法有一個(gè)小缺點(diǎn), zip(*table)操作將其中的列表變 為了元組。 正如以前所述,元組是不可變的。 這意味著用了 zip()之后,不能再對(duì)單個(gè)單元格進(jìn)行操作。需要將行再次轉(zhuǎn)換為列表:

table [1] = list (table [1])
table [1][2] = 0.123

用這兩行指令可更改 zip(*table)后的單個(gè)單元格的值。 圖 7. 2 總結(jié)了可對(duì)表使用的 指令。

?著作權(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)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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