Python:pop()里面循环返回错误

0 python runtime-error while-loop

python新手再来一次,

我试图重复删除列表的最后一个条目,直到它返回某个字符.但是尝试运行脚本我得到"IndexError:从空列表中弹出".所以whileList不包含在while循环中?

码:

theList = list("abc/123")

popStop = ""
popped = ""

while popStop != "/":
   if theList.pop() != "/":
      popped = popped + str(theList.pop())
   else:
     popStop = "/"
Run Code Online (Sandbox Code Playgroud)

在此先感谢您的帮助.

Abh*_*jit 11

你是poping同一个项目两次.你可能有意

while popStop != "/":
   item = theList.pop()
   if item != "/":
      popped = popped + str(item)
   else:
     popStop = "/"
Run Code Online (Sandbox Code Playgroud)

想想更深

有了一点经验,你很快就会意识到,上面的代码并不是非常pythonic.您可以使用for循环编写更好的循环结构.

for e in reversed(theList):
    if e != '/':
        popped += e
    else:
        popStop = e
        break
Run Code Online (Sandbox Code Playgroud)

然后你开始寻找周围的Python库,并实现它有一个极好的工具,可迭代称为itertools,所以你写出来使用另一个版本takewhile

from itertools import takewhile
popped  = ''.join(takewhile(lambda e: e != '/', reversed(theList)))
Run Code Online (Sandbox Code Playgroud)

现在有了更多的经验,你很快就会意识到,你实际上正在分裂一条路径,而且Python足以让你为它保留一个库(os.path.split)函数.

os.path.split(theList)[-1][::-1]
Run Code Online (Sandbox Code Playgroud)

同时你已经向PEP-8介绍了自己的官方风格指南,当你意识到,在CamelCase中命名变量不是Pythonic.

然后你最终得到一个漂亮的单行

os.path.split(the_list)[-1][::-1]
Run Code Online (Sandbox Code Playgroud)