首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Python中交换元音和辅音

如何在Python中交换元音和辅音
EN

Stack Overflow用户
提问于 2012-12-11 14:16:35
回答 2查看 1.4K关注 0票数 2

我想做一个函数,它将解码一个单词的方式如下:第一个元音交换与最后一个,第二个与倒数第二等。我想做同样的辅音。最后,它将返回解码后的单词。

这是我的元音代码的开头:

代码语言:javascript
运行
复制
def decode(w):
    for i in range(len(w)):
        for j in range(len(w[::-1])):
            if (i[0] in 'aeiouy' and j[0] in 'aeiouy'):
                s[i],s[j]=s[j],s[i]
    return w

问题是我不知道如何交换这些字母。

例如:给我一个单词:‘星期六’,我的函数返回给我'dyratsua‘

EN

回答 2

Stack Overflow用户

发布于 2012-12-11 15:01:13

代码语言:javascript
运行
复制
word = 'aerodynamic'

vowels = 'aeiouy'

is_vowel = [x in vowels for x in word]
word_vowels = [x for x in word if x in vowels]
word_consonants = [x for x in word if x not in vowels]

word_vowels.reverse()
word_consonants.reverse()

new_word = [word_vowels.pop(0) if x else word_consonants.pop(0) for x in is_vowel]
票数 5
EN

Stack Overflow用户

发布于 2012-12-11 14:47:40

这里有一种方法,你可以用元音实现你想要的(尽管这有点复杂--别人会有更好的方法)。它所做的是首先从单词(w)创建一个列表,原因是列表是可变的,因此可以在迭代期间修改。vowels列表保存所有元音的索引位置。cutoff是奇怪的一部分--我们将zip vowel列表,它的反面是它自己,它看起来像这样:

代码语言:javascript
运行
复制
In [28]: zip(vowels, vowels[::-1])
Out[28]: [(1, 7), (3, 6), (6, 3), (7, 1)]

所以我们有了我们想要切换的索引位置,但正如你所看到的,在中间的元组之后,我们只需将字母交换回来。因此,我们必须指出我们不想使用整个zip列表,所以我们在中间把它去掉(因为奇数个元音只意味着中间的元音用它自己代替自己)。在此基础上,您可以像以前一样交换字母,但这次您使用的是一个可变列表。最后,将所有内容连接成一个字符串。

代码语言:javascript
运行
复制
In [29]: word = 'saturday'

In [30]: vowels = [index for index, c in enumerate(word) if c in 'aeiouy']

In [31]: w = [c for c in word]

In [32]: cutoff = int(round(len(vowels)/2.0))

In [33]: for i1, i2 in zip(vowels, vowels[::-1])[:cutoff]:
   ....:     w[i1], w[i2] = w[i2], w[i1]
   ....:     
   ....:     

In [34]: ''.join(w)
Out[34]: 'sytardua'
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13814699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档