3

このtry/exceptをラムダで1行に単純化する方法はありますか?

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 ""

最後に、命名法に関する1つの小さな注意:i伝統的に「インデックス」を意味するために使用for i, j in enumerate(…)されるため、使用する方が「通常」になります。

于 2013-01-08T05:49:38.050 に答える