我正在写一个函数来反转一个字符串,但是直到最后它并没有完成它。我在这里想念什么吗?
def reverse_string(str):
straight=list(str)
reverse=[]
for i in straight:
reverse.append(straight.pop())
return ''.join(reverse)
print ( reverse_string('Why is it not reversing completely?') )
最佳答案
问题是您从原始元素中抄送了元素,从而更改了列表的长度,因此循环将在元素的一半处停止。
通常,这可以通过创建临时副本来解决:
def reverse_string(a_str):
straight=list(a_str)
reverse=[]
for i in straight[:]: # iterate over a shallow copy of "straight"
reverse.append(straight.pop())
return ''.join(reverse)
print(reverse_string('Why is it not reversing completely?'))
# ?yletelpmoc gnisrever ton ti si yhW
但是,在反转的情况下,您可以使用现有的(更简便的)替代方法:
切片:
>>> a_str = 'Why is it not reversing completely?'
>>> a_str[::-1]
'?yletelpmoc gnisrever ton ti si yhW'
或
pop
迭代器:>>> ''.join(reversed(a_str))
'?yletelpmoc gnisrever ton ti si yhW'