2011-11-23 20 views

回答

2

而不是counter += 1,也許使用counter + 1你已經使用了counter

或者:

for counter, file in ((i + 1, f) for i, f in enumerate(files)): 
    ... 

(Python的2.6和更高版本有一些偉大的東西嘗試升級如果可以的話。)

1

您可以使用zip()

>>> enums = zip(range(1, len(files) + 1), files) 
>>> for index, val in enums: 
    print index, val 
+0

這是一個很酷的答案,但值得一提的是,在舊版本的Python拉鍊和範圍都將複製列表,並izip還有range可能需要 –

+0

您可以把他們結束了,但要注意,'izip'會返回一個發電機。 –

4

發生器是完美的:

def altenumerate(it): 
    return ((idx+1, value) for idx, value in enumerate(it)) 

簡化對於較舊版本的python:

def altenumerateOld(it): 
    idx = 1 
    for value in it: 
     yield (idx, value) 
     idx += 1 
+0

我想我做這件事的方式並不是什麼大事,除了風格/簡單......我會做得更好,還是隻是反擊+ 1? – user1058492

+1

你最好升級到Python 2.7。 –

+0

IMO,這取決於你需要多久做一次。如果你要通過一堆循環來分散'counter + 1',那麼將這個想法抽象成一個生成器表達式或函數。如果這是一個關閉,任何事情都會做。 –

0
for counter, item in enumerate(testlist): 
    print(counter+1) 
    print(item) 
2

你可以使自己的enumerate()版本:

def enumerate_1based(iterable): 
    for index, item in enumerate(iterable): 
     yield index+1, item 

或者,添加start參數,使其工作就像更高版本的enumerate()

1

我這樣做是這樣的:

#Emulate enumerate() with start parameter (introduced in Python 2.6) 
for i,v in (i+start,v for i,v in enumerate(seq)): 
    //do stuff 

基本上,這是一樣的,但一個獨立的結構。

相關問題