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

时间:2015-04-24 21:11:12

标签: python for-loop range iteration enumerate

在python中,是否有一种简短的方式来编写for i in range(len(l)):

我知道我可以使用for i,_ in enumerate(l):,但我想知道是否有另一种方式(没有_)。

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

3 个答案:

答案 0 :(得分:5)

如果您想比较连续元素,则不需要使用索引。您可以改为使用zip()

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

或者仍然使用enumerate()

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

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

答案 1 :(得分:1)

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

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

然后:

for i in r(l):
    ...

短9个字符!

答案 2 :(得分:0)

有些用例需要迭代索引,但它们并不常见,以证明更多的succint语法。即使您在列表中找到重复项的示例,也可以在没有索引的情况下轻松(并且可以说更可读)完成。例如:

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

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