我正在尝试取一个字符串,并从超过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"
答案 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;