2012-05-29 2 views
2

Я хочу получить доступ к объекту, то есть к массиву [i], а также к числу интернаторов, т.е.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 

Обратите внимание на начальное значение индекса, указанный в качестве 2-го параметра в 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 :) –