これは、母音で目的を達成する方法の 1 つです (少し複雑ですが、他の誰かがより良い方法を持っているでしょう)。それが行うことは、最初に単語 ( w
) からリストを作成することです。その理由は、リストが変更可能であり、反復中に変更できるからです。リストには、すべての母音のvowels
インデックス位置が保持されます。これcutoff
は奇妙な部分ですzip
。vowel
リスト自体を逆にすると、次のようになります。
In [28]: zip(vowels, vowels[::-1])
Out[28]: [(1, 7), (3, 6), (6, 3), (7, 1)]
切り替えたいもののインデックス位置がありますが、中央のタプルの後でわかるように、文字を元に戻すだけです。したがって、ped リスト全体を使用したくないことを示す必要があるzip
ため、途中で切り取ります (母音の数が奇数であるということは、真ん中の母音がそれ自体を置き換えることを意味するためです)。そこからは、以前と同じように文字を交換しますが、今回は変更可能なリストを操作します。最後に、すべてを結合して文字列にします。
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'