我是编程新手,正在尝试编写自己的反向函数。不按计划进行

时间:2017-07-22 04:35:27

标签: python

下面是一些代码,它似乎在开始时起作用,但是将我的保持变量填充为一半而留下另一个在列表中我试图给出列表元素。最后一个要素。我不知道为什么这不是在整个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")

5 个答案:

答案 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")

打印出来:dnoBsemaJ

答案 4 :(得分:0)

拼接可以帮助你,除非你想写算法反转

>>> k = 'JamesBond'
>>> rev_str = k[::-1]
>>> rev_str
'dnoBsemaJ'
>>> type(rev_str)
<type 'str'>