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)
| 归档时间: |
|
| 查看次数: |
2794 次 |
| 最近记录: |