只需一次尝试/除了lambda - Python?

时间:2013-01-08 05:46:22

标签: python lambda try-except

有没有办法简化这个try / except到lambda的一行?

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] 

1 个答案:

答案 0 :(得分: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(…)会更“正常”。