2013-01-08 34 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