我正在编写一个函数来反转一个字符串,但它还没有完成它直到结束。我在这里错过了什么吗?
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?') )
答案 0 :(得分:5)
问题是你从原始元素 let maxNumberOfRepeats = 10
var currentNumberOfRepeats = 0
Timer.scheduledTimer(withTimeInterval: 5, repeats: true) { timer in
currentNumberOfRepeats = currentNumberOfRepeats + 1
if currentNumberOfRepeats == maxNumberOfRepeats {
timer.invalidate()
UIView.animate(withDuration: 1, animations: {
self.backgroundColor = UIColor(red: 0.0, green: 1.0, blue: 0.0, alpha: 1.0) //return to first color
})
} else {
UIView.animate(withDuration: 1, animations: {
self.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 1.0) //or any other random color
})
}
}
元素,从而改变了列表的长度,所以循环将停止在元素的一半。
通常,这可以通过创建临时副本来解决:
pop
但是,如果是倒车,您可以使用现有的(更简单的)替代方案:
切片:
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'
迭代器:
reversed
答案 1 :(得分:1)
在python中,您可以使用步骤迭代器来反转字符串
print('hello'[::-1])
将反转字符串
答案 2 :(得分:1)
有一种更容易的逆转方式:
>>> 'my string'[::-1]
'gnirts ym'
答案 3 :(得分:0)
您可以使用从列表的最后一个索引到零索引的循环,然后在另一个列表中使用append
,然后使用join
来获得反向归档。
def reverse_string(str):
straight=list(str)
print straight
reverse=[]
for i in range(len(straight)-1,-1,-1):
reverse.append(straight[i])
return ''.join(reverse)
print ( reverse_string('Why is it not reversing completely?') )