为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

智慧大石 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 关注
  • 123 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信