我有以下代码,它将输入字符串翻译成摩尔斯电码。我的代码遍历字符串中的每个字母,然后遍历字母表中的每个字符。这是非常低效的,因为如果我从一个非常大的文件而不是一个小的字母字符串中读取怎么办。有什么方法可以改进我的代码,也许使用模块 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
最佳答案
您可以使用 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))
t
函数简化为一个 filter()
和一个循环遍历输入代码中每个字符的生成器表达式。
morse_letters
字典现在可以非常快速地查找代码,filter()
删除了任何不存在的None
结果一个字母。
结果:
>>> t('S.O.S.')
['...', '---', '...']
>>> t('Stack Overflow')
['...', '-', '.-', '-.-.', '-.-', '---', '...-', '.', '.-.', '..-.', '.-..', '---', '.--']
关于python - 如何提高循环效率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13754209/