是否可以使用if语句方法简化此列表的理解?

时间:2019-09-22 06:28:47

标签: python python-3.7

我正在尝试取一个字符串,并从超过4个字符的单词中删除元音。

有没有更有效的方式编写此代码?

(1)从字符串中创建一个数组。

(2)遍历数组,并从超过4个字符的字符串中删除元音。

(3)将数组中的字符串连接到新字符串。

谢谢!

def abbreviate_sentence(sent):

    split_string = sent.split()
    for words in split_string:
        abbrev = [words.replace("a", "").replace("e", "").replace("i", "").replace("o", "").replace("u", "")
                        if len(words) > 4 else words for words in split_string]
        sentence = " ".join(abbrev)
        return sentence


print(abbreviate_sentence("follow the yellow brick road"))      # => "fllw the yllw brck road"

2 个答案:

答案 0 :(得分:2)

您可以避免使用外部for,因为您已经在内部进行迭代。另外,您可以将多个replace替换为另一个嵌套在列表中的列表理解。

# for words in split_string:   <- This line is not required
vowels = 'aeiou'
abbrev = [''.join([x for x in words if x.lower() not in vowels]) if len(words) > 4 else words for words in split_string]
sentence = " ".join(abbrev)
return sentence

或者将字符串部分的形成抽象为一个新函数,可能会增加其可读性:

def form_word(words):
    vowels = 'aeiou'
    return ''.join([x for x in words if x.lower() not in vowels])

def abbreviate_sentence(sent):
    split_string = sent.split()
    abbrev = [form_word(words) if len(words) > 4 else words for words in split_string]
    sentence = " ".join(abbrev)
    return sentence

答案 1 :(得分:0)

奥斯汀的解决方案或以下解决方案都应适用。我认为这两种方法都不比您现在拥有的计算效率高得多,因此我将重点放在可读性和合理性上。

0x80 0xB8 0x00 0x00 0xd 0xb 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x00 0x00 0x00 0x7F;