有没有办法简化这个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]
答案 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(…)
会更“正常”。