这是你可以用元音实现你想要的一种方法(虽然它有点复杂 - 其他人会有更好的方法)。它的作用是首先从您的单词 ( w
) 创建一个列表,原因是列表是可变的,因此可以在我们的迭代过程中进行修改。该vowels
列表保存所有元音的索引位置。这cutoff
是一个奇怪的部分 - 我们将使用它本身的反面zip
进入vowel
列表,它看起来像这样:
In [28]: zip(vowels, vowels[::-1])
Out[28]: [(1, 7), (3, 6), (6, 3), (7, 1)]
所以我们有我们想要切换的索引位置,但正如你在中间元组之后看到的那样,我们只需将字母交换回来。因此我们必须表明我们不想使用整个zip
ped 列表,所以我们在中间将其切断(因为奇数个元音将意味着中间元音用它自己替换它自己)。从那里开始,您就像以前一样 - 交换字母,但这次您使用的是可变列表。最后,将所有内容连接成一个字符串。
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'