所以基本上我必须制作一个反转字符串的每个奇数字母的代码。 我有一个公平的方式,但无法弄清楚如何正确地将琴弦放回原处。
所以输出应该是' 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"')
答案 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