如何反转字符串中的每个奇数字母?

时间:2017-12-01 17:15:55

标签: python

所以基本上我必须制作一个反转字符串的每个奇数字母的代码。 我有一个公平的方式,但无法弄清楚如何正确地将琴弦放回原处。

所以输出应该是' hlleo',而是我得到了'hloe'。我该如何解决? 输入是你好的 预期的产出是hlleo
输出是hloe

word = 'hello'
output = ''
value = -1
word1 = word[0::2]
word2 = word[1::2]
word2 = word2[::-1]
print(word2)
print(word1)
for letter in word2:
    value += 2
    output = word1[:value] + letter + word1[value:]
    print(output)
print('Correct output should be "hlleo"')

5 个答案:

答案 0 :(得分:2)

这有效:

In [6]: word = 'hello'

In [7]: dorw = list(reversed(word))

In [8]: new_word = ''

In [9]: for i in range(len(word)):
   ...:     w = word[i]
   ...:     if i % 2 != 0:
   ...:         w = dorw[i]
   ...:     new_word += w
   ...:

In [10]: new_word
Out[10]: 'hlleo'

根据索引i,可以从真正的“单词”或其反转版本中获取单词。

答案 1 :(得分:0)

您可以将字符串转换为list并使用切片分配并将join重新组合在一起:

w = 'abcdef'
l = list(w)
l[1::2] = l[1::2][::-1]
w2 = ''.join(l)
# 'afcdeb'

答案 2 :(得分:0)

这是一个班轮。

inv_word = "".join([word[i] if i%2==0 else word[len(word)-(i+1)] for i in range(len(word))])

这里的逻辑是我们通过迭代单词来构建一个新的字符列表。如果索引是偶数(i%2==0),那么我们在单词中使用相应的索引。否则,我们使用在索引len(word)-(i+1)找到的倒置字符。

最后,将列表与"".join()一起加入以使其成为字符串。

答案 3 :(得分:0)

def revodd(s):
    l = list(s)
    l[1::2] = reversed(l[1::2])
    return "".join(l)

转换为字符串列表(因为列表是可变的,字符串不是&t;),将奇数索引的切片设置为自身的反转版本,并将列表join重新设置为字符串。我看到@schwobaseggl用切片做了反向,但我认为使用reversed更具可读性。

测试用例:

In [23]: revodd("0123456789")
Out[23]: '0927456381'

In [24]: revodd("012345678")
Out[24]: '072543618'

In [25]: revodd("hello")
Out[25]: 'hlleo'

答案 4 :(得分:0)

除非我误解了你的问题,否则这只能与奇数长度字符串'正常工作',以便奇数索引字符全部与其他奇数索引字符交换。

def invert_odds(string):

    # Get reverse of string
    reverse = string[::-1]

    new_string = ""

    # Make new string with chars from either original or reversed
    # strings depending on index
    for i in range(len(string)):
        if i % 2 == 0:
            new_string += string[i]
        else:
            new_string += reverse[i]

    return new_string