2013-01-08 32 views
2

有没有办法简化这个尝试/除了一个lambda的一行?只需一个尝试/除了lambda - Python?

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] 
+2

所以...你想要完成什么,在这里? – Ryan

+0

这是奇怪的代码 –

+0

这是假设做一些动态编程,我在列表中看到上一个和下一个项目,并根据我计算的某些收敛做出一些决定。 – alvas

回答

5

不,Python没有任何速记或简化到try/except语法。

为了解决您的具体问题,我可能会使用类似:

for j, i in enumerate(alist[:-1]): 
    iplus1 = i + alist[j + 1] 

这将避免异常的需要。

或获得超爽的和通用的:

from itertools import islice 

for j, i in enumerate(islice(alist, -1)): 
    iplus1 = i + alist[j + 1] 

替代,你可以使用:itertools.iziplongest做同样的事情:

for i, x in itertools.izip_longest(alist, alist[1:], fillvalue=None): 
    iplus1 = i + x if x is not None else "" 

最后,一个关于命名小记:i传统上用于意思是“索引”,所以使用for i, j in enumerate(…)会更“正常”。

+1

您还需要添加没有后缀的最后一个元素 –

+0

是的,那肯定需要考虑 –

+0

_i是传统使用的意思是“索引” - 仍然是一个很好的习惯,即使是对索引也给出更多可辨别的名字,这样他们就不会在超过2行的循环中迷失方向。单字母变量名称是日子里可怕的遗产穿孔卡片,应该放弃! – volcano