2012-05-29 79 views
2

我想訪問該對象,即數組[i],以及interator計數,即。python - 這是一個有效的循環?

這就是我想:

for i, pinName in allPorts[startIndex:endIndex]: 
    #do stuff 

我得到的錯誤進一步下跌,只是想知道如果它的這部分代碼。

python的新功能在這裏。乾杯。

+1

什麼是錯誤!並向我們​​展示您的代碼... –

回答

7

我想你,而正在尋找:

for i, pinName in enumerate(allPorts[startIndex:endIndex]): 
    ... 

enumerate()內置採取任何列表(元組,迭代,...),並與指數收益率(指數,項目)的元組從0開始。

4

考慮enumerate()它返回一個元組與所述索引值和元件:

startIndex = 2 
endIndex = 4 

for i, pinName in enumerate(allPorts[startIndex:endIndex], startIndex): 
    print('index = {} element = {}'.format(i, pinName)) 

收率:

index = 2 element = 66 
index = 3 element = 99 

注意開始指定爲enumerate()第二個參數的索引值否則將始終與指數0(忽略你的startIndex,除非你總是想0開始)開始。

+0

如果您在示例中運行我的原始代碼,它將不會提供正確的功能? – JDS

+0

@YoungMoney你的'i'值(迭代器數)總是以零開始? – Levon

1

我懷疑這是你在想什麼:

for i, pinName in enumerate(allPorts[startIndex:endIndex]): 
    #do stuff 

不過,我不認爲這會做你的期望。 allPorts[startIndex:endIndex]將「切片」列表中,並創建一個新的,所以allPorts[i]仍然會給出錯誤的指數,如果startIndex != 0

如果需要i是在原allPorts索引,那麼隨便,我認爲這就是你「將不得不做的事:

i = startIndex 
while i < endIndex: 
    pinName = allPorts[i] 
    #do stuff 
    i += 1 

正如評論建議,這裏有一個更好的方法來做到這一點:

for i in xrange(startIndex, endIndex): 
    pinName = allPorts[i] 
    #do stuff 
+0

'i ++'不是有效的python。 –

+0

@JoelCornett對不起,腦屁。現在修復。 – Izkata

+0

它總是發生在我身上:P對我而言,在Ruby和Python之間切換時是最糟糕的:) –