我有以下代码,它将输入字符串转换为莫尔斯代码.我的代码遍历字符串中的每个字母,然后遍历字母表中的每个字符.这是非常低效的,因为如果我从一个非常大的文件中读取,而不是一个小的字母串.有什么方法可以改进我的代码,也许使用模块re,将我的字符串与莫尔斯代码字符匹配?
morse_alphabet = ".- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.."
ALPHABET = "abcdefghijklmnopqrstuvwxyz"
morse_letters = morse_alphabet.split(" ")
result = []
count_character = 0
def t(code):
for character in code:
count_letter = 0
for letter in ALPHABET:
lower_character = code[count_character].lower()
lower_letter = letter.lower()
if lower_character == lower_letter:
result.append(morse_letters[count_letter])
count_letter += 1
count_character += 1
return result
Run Code Online (Sandbox Code Playgroud)
您可以string.ascii_lowercase一起使用zip()来制作字典:
import string
morse_alphabet = ".- -... -.-. -.. . ..-. --. .... .. .--- -.- .-.. -- -. --- .--. --.- .-. ... - ..- ...- .-- -..- -.-- --.."
morse_letters = dict(zip(string.ascii_lowercase, morse_alphabet.split()))
def t(code):
return filter(None, (morse_letters.get(c.lower()) for c in code))
Run Code Online (Sandbox Code Playgroud)
该t函数简化为a filter()和生成器表达式循环输入代码中的每个字符.
该morse_letters字典现在使的代码非常快的查找,该filter()删除None的任何不信的结果.
结果:
>>> t('S.O.S.')
['...', '---', '...']
>>> t('Stack Overflow')
['...', '-', '.-', '-.-.', '-.-', '---', '...-', '.', '.-.', '..-.', '.-..', '---', '.--']
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
158 次 |
| 最近记录: |