如何提高循环效率?

Jac*_*dly 1 python

我有以下代码,它将输入字符串转换为莫尔斯代码.我的代码遍历字符串中的每个字母,然后遍历字母表中的每个字符.这是非常低效的,因为如果我从一个非常大的文件中读取,而不是一个小的字母串.有什么方法可以改进我的代码,也许使用模块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)

Mar*_*ers 6

您可以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)