Skip to main content
 首页 » 编程设计

python之如何提高循环效率

2025年05月04日11qlqwjy

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