2015-04-24 50 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所示)