我需要我的櫃檯1.啓動現在我有如何列舉第一個「索引」報告爲1的列表? (Python 2.4中)
for(counter, file) in enumerate(files):
counter += 1
//do stuff with file and counter
但是,必須有一個更好的辦法,在Python V2.4
我需要我的櫃檯1.啓動現在我有如何列舉第一個「索引」報告爲1的列表? (Python 2.4中)
for(counter, file) in enumerate(files):
counter += 1
//do stuff with file and counter
但是,必須有一個更好的辦法,在Python V2.4
而不是counter += 1
,也許使用counter + 1
你已經使用了counter
。
或者:
for counter, file in ((i + 1, f) for i, f in enumerate(files)):
...
(Python的2.6和更高版本有一些偉大的東西嘗試升級如果可以的話。)
您可以使用zip()
:
>>> enums = zip(range(1, len(files) + 1), files)
>>> for index, val in enums:
print index, val
發生器是完美的:
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
我想我做這件事的方式並不是什麼大事,除了風格/簡單......我會做得更好,還是隻是反擊+ 1? – user1058492
你最好升級到Python 2.7。 –
IMO,這取決於你需要多久做一次。如果你要通過一堆循環來分散'counter + 1',那麼將這個想法抽象成一個生成器表達式或函數。如果這是一個關閉,任何事情都會做。 –
for counter, item in enumerate(testlist):
print(counter+1)
print(item)
你可以使自己的enumerate()
版本:
def enumerate_1based(iterable):
for index, item in enumerate(iterable):
yield index+1, item
或者,添加start
參數,使其工作就像更高版本的enumerate()
。
我這樣做是這樣的:
#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
基本上,這是一樣的,但一個獨立的結構。
這是一個很酷的答案,但值得一提的是,在舊版本的Python拉鍊和範圍都將複製列表,並izip還有range可能需要 –
您可以把他們結束了,但要注意,'izip'會返回一個發電機。 –