有没有办法简化这个尝试/除了一个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