2012-06-13 2 views
0

Очень короткий и, вероятно, легко ответить на вопрос для тех, у кого больше опыта программирования. Я хочу увеличить счетчик на один, если выполняется определенное условие. Я использую xrange() в моем for -loop. Могу ли я вручную увеличить i или мне нужно построить собственный счетчик?Приращение при определенных условиях с помощью xrange()

for i in xrange(1,len(sub_meta),2): 
    if sub_meta[i][1] < sub_meta[i-1][1]: 
      dict_meta[sub_meta[i-1][0]]= sub_meta[i][0] 
    elif sub_meta[i][1] == sub_meta[i-1][1]: 
      dict_meta[sub_meta[i-1][0]]= '' 
      i += 1 

ответ

4
i = 1 
while i < len(sub_meta): 
    if sub_meta[i][1] < sub_meta[i-1][1]: 
     dict_meta[sub_meta[i-1][0]]= sub_meta[i][0] 
    elif sub_meta[i][1] == sub_meta[i-1][1]: 
     dict_meta[sub_meta[i-1][0]]= '' 
     i += 1 
    i += 2 
+0

Так что да , Я должен построить свой счетчик. Это то, что я думал ... – LarsVegas

1

Если вы планируете делать это часто, вот реализация, которая использует преимущества метода send() на генераторах:

def changeable_range(start, stop=None, step=1): 
    if stop is None: start, stop = 0, start 
    while True: 
     for i in xrange(start, stop, step): 
      inc = yield i 
      if inc is not None: 
       start, stop = i, stop + inc 
       break 
     else: 
      raise StopIteration 

Использование:

>>> myRange = changeable_range(3) 
>>> for i in myRange: print i 
... 
0 
1 
2 
>>> myRange = changeable_range(3) 
>>> for i in myRange: 
...  print i 
...  if i == 2: junk = myRange.send(2) #increment the range by 2 
... 
0 
1 
2 
3 
4 
+0

Новейшие слышали о методе 'send'. Очень интересно. Спасибо за ваш вклад, очень ценю! – LarsVegas

+0

Он был представлен в версии 2.5. Вот ссылка на PEP: http://docs.python.org/whatsnew/2.5.html#pep-342-new-generator-features –

Смежные вопросы