python 中 'for i in range(1,len(a)):' 的缩写

Short for 'for i in range(1,len(a)):' in python

在python中,有没有简写for i in range(len(l)):的方法?

我知道我可以使用 for i,_ in enumerate(l):,但我想知道是否有其他方法(没有 _)。

请不要说 for v in l 因为我需要索引(例如比较连续值 l[i]==l[i+1])。

如果你想比较连续的元素,你不需要使用索引。您可以使用 zip() 代替:

for el1, el2 in zip(l, l[1:]):

或无论如何使用enumerate()

for el2idx, el1 in enumerate(l[:-1], 1):
    el2 = l[el2idx]

如果你真的必须生成只是和索引,那么range(len(l))就足够短了,没有更短的形式。

你可以通过定义一个函数来缩短它:

def r(lst):
    return range(len(lst))

然后:

for i in r(l):
    ...

少了9个字!

有需要迭代索引的用例,但它们并不常见以证明更简洁的语法是合理的。即使是您给出的在列表中查找重复项的示例,也可以在没有索引的情况下轻松(并且可以说更具可读性)完成。例如:

it = iter(items)
last = next(items, None)

for item in it:
   if item == last:
       print "Duplicate:", item
       break
   else:
      last = item
else:
   print "No duplicate found."

(您也可以使用 zip(),如 Martijn 所示。)