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

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

以特定方式分隔列表的每一項

以特定方式分隔列表的每一項

智慧大石 2021-09-25 16:18:55
我有一個輸入,它是一個字符串元組,用 a1z26 密碼編碼:1 到 26 的數字表示字母,連字符表示相同的單詞字母,空格表示單詞之間的空格。例如:8-9 20-8-5-18-5 應該翻譯成“你好”假設最后一個示例是名為 string 的 var 中的元組string = ('8-9','20-8-5-18-5')我發現合乎邏輯的第一件事是使用字符串 = 列表(字符串)所以現在string = ['8-9','20-8-5-18-5']現在的問題是,當我遍歷列表以將其與具有翻譯值的字典進行比較時,兩位數被視為一個數字,因此,例如,不是翻譯“20”,而是先翻譯“2”,然后再翻譯“ 0',導致字符串說 'hi bheahe' (2 =b, 1 = a and 8 = h)所以我需要一種方法將上面的列表轉換為下面的列表['8','-','9',' ','20','-','8','-','5','-','18','-','5',]我已經嘗試過使用各種代碼list()、join() 和 split()但它最終給了我同樣的問題??偠灾?,我需要將任何給定的列表(從輸入元組轉換而來)制作成一個字符列表,該列表完全考慮了兩位數、空格和連字符這是我到目前為止所得到的。(我最后寫的)輸入在代碼(字符串)中更上一層a1z26 =  {'1':'A', '2':'B', '3':'C', '4':'D', '5':'E', '6':'F', '7':'G', '8':'H', '9':'I', '10':'J', '11':'K', '12':'L',  '13':'M', '14':'N',  '15':'O', '16':'P', '17':'Q', '18':'R', '19':'S', '20':'T', '21':'U', '22':'V',  '23':'W', '24':'X', '25':'Y', '26':'Z', '-':'', ' ' : ' ', ', ' : ' '}                translation = ""    code = list(string)    numbersarray1 = code    numbersarray2 = ', '.join(numbersarray1)                for char in numbersarray2:        if char in a1z26:            translation += a1z26[char] 
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

我認為,最好在那里應用正則表達式。


例子:


import re

...

src = ('8-9', '20-8-5-18-5')

res = [match for tmp in src for match in re.findall(r"([0-9]+|[^0-9]+)", tmp + " ")][:-1]

print(res)

結果:


['8', '-', '9', ' ', '20', '-', '8', '-', '5', '-', '18', '-', '5']


查看完整回答
反對 回復 2021-09-25
?
慕工程0101907

TA貢獻1887條經驗 獲得超5個贊

無需將元組轉換為列表。元組也是可迭代的。

我不認為你提到的名單是你真正想要的。您可能想要一個 2d 可迭代對象(不一定是列表,正如您將在下面看到的,我們可以一次性完成此操作而無需生成中間列表),其中每個項目對應一個單詞并且是一個字符編號列表:

[[8, 9], [20, 8, 5, 18, 5]]

由此,您可以將每個數字轉換為一個字母,將這些字母連接在一起形成單詞,然后用空格連接單詞。

為此,您需要向 split 傳遞一個參數,以告訴它如何拆分您的輸入字符串。您可以使用一個襯墊來實現所有這些:

plaintext = ' '.join(''.join(num_to_letter[int(num)] for num in word.split('-'))
                     for word in ciphertext.split(' '))

這正是如上所述的拆分過程,然后對每個數字查看字典num_to_letter以進行轉換。

請注意,您甚至不需要這個 dict。您可以使用 Unicode 中的 AZ 是連續的這一事實,因此您可以將 1-26 轉換為 AZ chr(ord('A') + num - 1)。


查看完整回答
反對 回復 2021-09-25
  • 3 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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