有沒有辦法簡化這個嘗試/除了一個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]
有沒有辦法簡化這個嘗試/除了一個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]
不,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(…)
會更「正常」。
您還需要添加沒有後綴的最後一個元素 –
是的,那肯定需要考慮 –
_i是傳統使用的意思是「索引」 - 仍然是一個很好的習慣,即使是對索引也給出更多可辨別的名字,這樣他們就不會在超過2行的循環中迷失方向。單字母變量名稱是日子裏可怕的遺產穿孔卡片,應該放棄! – volcano
所以...你想要完成什麼,在這裏? – Ryan
這是奇怪的代碼 –
這是假設做一些動態編程,我在列表中看到上一個和下一個項目,並根據我計算的某些收斂做出一些決定。 – alvas