3

有没有办法将这个 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] 
4

1 回答 1

6

try不,Python 对/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(…)会更“正常”。

于 2013-01-08T05:49:38.050 回答