下面是一些代码,它似乎在开始时起作用,但是将我的保持变量填充为一半而留下另一个在列表中我试图给出列表元素。最后一个要素。我不知道为什么这不是在整个flist中迭代。救命?
由于 Sembor
def reverse(text):
flist = []
holding = ""
for i in str(text):
flist.append(i)
print(flist)
for i in flist:
holding = holding + flist[-1]
del flist[-1]
print(holding)
print(flist)
reverse("JamesBond")
答案 0 :(得分:1)
而不是在迭代它时尝试修改列表。相反,你应该做的只是创建一个新的字符串,并以相反的顺序附加字母。您可以使用range
向后计数来执行此操作:
def reverse(text):
reverse_string = ""
for i in range(len(text) - 1, -1, -1):
reverse_string += text[i]
print(reverse_string)
reverse("JamesBond")
然而,在python中执行此操作的最佳方法是使用切片,其中,您可以简单地执行:
reverse_string = text[::-1]
答案 1 :(得分:1)
正如this comment所说,问题在于您在重复修改列表时会对其进行迭代。
基本上,for i in range plist
并不会遍历所有元素,因为您循环浏览时会缩短列表。这是您在列表中发生的事情,因为您正在迭代它。
holding plist
d ["J","a","m","e","s","B","o","n","d"]
^
dn ["J","a","m","e","s","B","o","n"]
^
dno ["J","a","m","e","s","B","o"]
^
dnoB ["J","a","m","e","s","B"]
^
dnoBs ["J","a","m","e","s"]
^ #can't loop any further
你可以做的是这样的事情
for i in range(len(plist), -1, -1):
holding = holding + plist[i]
或者这个
def reverse(text):
return text[::-1]
或者您可以使用内置的reversed
功能,例如equaio did。
答案 2 :(得分:0)
从字符串创建列表时,您可以使用list.comprehension:
[i for i in text]
你可以通过使用enumerate来解决这个问题:
[文本[-ind-1]表示ind,i表示枚举(文本)]
答案 3 :(得分:0)
据我了解你想要接受字符串" JamesBond"并将其反转为" dnoBsemaJ"。我也是Python的新手。我试试了你的功能,想出了以下内容。它可能不是最漂亮的,但确实会反转文本。
def reverse(_string):
_stringLen = len(_string)
i = _stringLen - 1
_newstring = ""
while i >= 0:
_newstring = _newstring + _string[i]
i -= 1
return _newstring
print reverse("JamesBond")
答案 4 :(得分:0)
拼接可以帮助你,除非你想写算法反转
>>> k = 'JamesBond'
>>> rev_str = k[::-1]
>>> rev_str
'dnoBsemaJ'
>>> type(rev_str)
<type 'str'>