亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將列表與字典進行比較并生成新列表。新列表的長度是 1?

將列表與字典進行比較并生成新列表。新列表的長度是 1?

達令說 2022-09-20 15:34:41
我正在嘗試通過將列表A中的元素與字典中的X元素進行比較來生成列表B。列表 B 應從字典中生成 X 和列表 A 匹配的所有 Y 元素。這是我的列表和字典(這是DNA翻譯成蛋白質的程序):這是我的代碼:protlist = []for i in range(0,Len): # Len is length of tuple    tu = tuple[3*i:3*i+3]    if tu in diction:        for x,y in diction.items():            if tu == x:                protlist = [y]                print(*protlist,end =" ") # This prints each y value in a linear fashion                breakprint(len(protlist))  這是我的預期輸出:此代碼將表面上生成正確的列表。但是,當我調用列表的長度時,它輸出為1。我嘗試用保護列表替換保護列表 = [y]。這給出了列表的正確長度和錯誤的輸出。我還嘗試使用連接函數而不是''.join(y),但這也給出了不正確的列表長度。如何編輯代碼以實現正確的輸出和列表長度?謝謝。
查看完整描述

1 回答

?
吃雞游戲

TA貢獻1829條經驗 獲得超7個贊

您得到是因為您為 中的每個循環重新分配了單個值。然后,替換 會給出錯誤的輸出,因為您在每個循環中打印。len(protlist) = 1protlistfor x,y in diction.items()protlist = [y]protlist.append(y)protlist


但是,要開始,不應是 的長度。元組的長度是 ,但每個循環中有三個字符,然后轉到接下來的三個字符。因此,您需要迭代才能到達字符串的末尾。Lentuple1170tu1170 / 3 = 390


然后有很多方法可以解決您的問題。像您提到的具有列表和聯接的示例是在循環中附加值,然后在循環外部進行打印和計數。


protlist = []


for i in range(0, int(len(tuple) / 3)):

    tu = tuple[3*i:3*i+3]

    if tu in diction:

        for x, y in diction.items():

            if tu == x:

                protlist.append(y)

                break


print(' '.join(protlist)) #prints list items separated by a space

print(len(protlist))

我根據你的預期輸出進行了測試,它給了我確切的結果。


編輯:此問題的類似簡化版本的列表理解示例:


string = 'aaabbbcccdddeee'

dictionary = {'aaa': 'A', 'bbb': 'B', 'ccc': 'C', 'ddd': 'D', 'eee': 'E'}


parts = [ string[i:i+3] for i in range(0, len(string), 3) ]

output = [ dictionary[x] for x in parts if x in dictionary.keys() ]

print(' '.join(output))


查看完整回答
反對 回復 2022-09-20
  • 1 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號