gpt4 book ai didi

python - 字符串反转只反转一半的字符串

转载 作者:太空宇宙 更新时间:2023-11-03 13:40:02 25 4
gpt4 key购买 nike

我知道我可以只使用 reverse 函数来反转字符串,但是对于 Codecademy 作业,我试图在没有 reverse 的情况下反转字符串[::-1]。在试图找出我的代码有什么问题时,我偶然发现了问题的可能解决方案,但此时,我只想了解我的代码在做什么。

def reverse(text):
text2 = list(text)
backwards = []
for char in text2:
backwards.append(text2[-1])
del(text2[-1])
return "".join(backwards)

text = raw_input("Say something:\n")

print reverse(text)

当我对此进行测试时,输出始终是字符串的后半部分反转。我不明白为什么 for char in text2: 会被解释为 for half_the_char in text2。我的代码如何解释这种奇怪现象?

最佳答案

您正在遍历列表从中删除。所以当你到达中间点时,列表的第二部分已经消失,for循环停止,因为不再有要迭代的项目。

每次迭代都打印出你的列表,你会看到发生了什么:

>>> text2 = list('hello')
>>> backwards = []
>>> for char in text2:
... backwards.append(text2[-1])
... del text2[-1]
... print 'char:', char, 'backwards:', backwards, 'text2:', text2
...
char: h, backwards: ['o'] text2: ['h', 'e', 'l', 'l']
char: e, backwards: ['o', 'l'] text2: ['h', 'e', 'l']
char: l, backwards: ['o', 'l', 'l'] text2: ['h', 'e']

for循环然后停止,因为左边没有更多的项目可以迭代;遍历索引后 0 , 12 ,列表已缩短到没有索引的地步 3不再。

你可以使用 while循环代替:

while text2:
backwards.append(text2[-1])
del(text2[-1])

现在循环仅在 text2 时停止完全是空的。

或者你可以遍历 text , 其中具有相同的长度和相同的字符;它几乎和你原来的一样毫无意义 for循环,因为你忽略 char循环目标相同:

for char in text:
backwards.append(text2[-1])
del(text2[-1])

但是text至少在循环时不会缩短,因此您的迭代不会过早结束。

或者您可以使用单独的索引 来选择要添加的字符,每次迭代都对其进行调整,然后text2 中删除:

index = -1
for character in text2:
backwards.append(text2[index])
index -= 1

现在您将迭代 len(text2)次。当然,您不需要转换 text到一个列表,你可以索引到 text .

关于python - 字符串反转只反转一半的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33017992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com