2015-04-24 29 views
0

在Python中,有写入for i in range(len(l)):短方法?短关于 '对于i在范围(1,LEN(a))的:' 在python

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

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

+10

'为i的范围(LEN(1))'足够短。 – vaultah

+1

有没有写'for'的简短方法? ;) –

+0

@EllaShar来吧,这只是'范围(LEN(1))'太长比较我如何经常使用它。我不喜欢它非常长。 –

回答

1

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

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

然后:

for i in r(l): 
    ... 

这是9个字符!

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))足够短,有不短的形式。

+0

你认为它应该存在一个较短的形式来获得指数? –

+0

@CarlosPinzón:没有,在大多数情况下,你并不真的需要使用'范围()',通常有更好的选择。 –

+0

通常有比使用指数更好的方法,正如Martijn在这里所展示的。如果你确实需要更短的方法,定义一个函数:'def indices(l):return range(len(l))' –

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

(也可以使用如zip()已的Martijn所示)