【发布时间】:2013-01-08 05:46:21
【问题描述】:
有没有办法用 lambda 简化这个 try/except 成一行?
alist = ['foo','bar','duh']
for j,i in enumerate(alist):
try:
iplus1 = i+alist[j+1]
except IndexError:
iplus1 = ""
除了:
j = '' if IndexError else trg[pos]
【问题讨论】:
-
那么...你想在这里完成什么?
-
假设做一些动态编程,我在列表中看到上一个和下一个项目,并根据我将计算的一些收敛做出一些决定。
-
我认为
try/except下面还有更多代码,对吧?否则循环没有意义,因为iplus1只会在最后得到最后一个值。但是有一个问题:当您迭代列表时,省略的代码是否会将新值写入列表?这在某些情况下是可行的,但如果你不小心,很容易做错。 -
不,如果 iplus1 不存在,它仍然是一个空字符串。
-
我不确定我是否理解你在做什么。在我看来,您的循环相当于
if alist: iplus1 = ""。不会看到任何i+alist[j+1]值,因为它们会相互覆盖,然后在发生异常时被空字符串覆盖(如果alist不为空,它总是会发生)。
标签: python lambda try-except