python - 如何提高循环效率?

标签 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

最佳答案

您可以使用 string.ascii_lowercasezip() 一起制作字典:

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/

相关文章:

python - 我们如何在多个表中引用一个外键?

python - 导入结果不一致

python - BeautifulSoup - <em> 给我的结果带来麻烦

python - Pulp Python LP - 错误的解决方案

python - 在展平参数张量上使用 tf.gradients 或 tf.hessians

python - 在 Meteor 运行时,如何从另一个客户端访问 Meteor 的 MongoDB?

python - import ... as ... 似乎失败, 'module' 没有属性

python - 不同发行版上的启动脚本

python - M2Crypto 导致核心转储

python - 当术语在 bash 中显示时终止终端应用程序