2015-03-07 3 views
3

У меня есть простой цикл:Python - как заставить enumerate начинаться с 1 - или обходной путь?

for index, (key, value) in enumerate(self.addArgs["khzObj"].nodes.items()): 

, и я хочу, чтобы начать новую WX горизонтальную BoxSizer после каждого 3-го пункта, чтобы создать панель с 3-мя узлами каждый и продолжались в течение, как многие, как и в узлах. Очевидным решением является:

if index % 3 == 0: add a horizontal spacer 

но перечисление начинается с 0, поэтому 0% 3 == 0, и было бы начать новую строку с места в карьер. Я пробовал делать:

if index == 0: index = index + 1 

но, конечно, не работает, потому что он создает новый вар вместо изменения оригинала - так что я получаю 1, 1, 2, 3, 4, и т.д., и что не будет работать, потому что я получу 4 узла до того, как я нажму индекс% 3 == 0.

Любые предложения о том, как это сделать? Это не большой список, обычно только около 10-15 предметов. Благодарю.

+0

Читайте. . Документация. 'pydoc enumerate' меньше усилий, чем спрашивать здесь ... –

+0

Аналогичный вопрос уже был задан в http://stackoverflow.com/questions/3303608/how-to-enumerate-a-range-of-numbers-starting- at-1 – prabhugs

ответ

17

Поскольку Python 2.6, enumerate() принимает необязательный параметр start, чтобы указать, где начать перечисление. См. the documentation for enumerate.

+0

Я этого не знал, думаю, вы каждый день узнаете что-то новое. Отличная работа. –

+1

Прежде, чем это было добавлено, 'itertools.izip (itertools.count (1), L)' было бы способом сделать это. –

+1

'+ 1' Это на самом деле очень удобно знать, но op также может просто использовать' index% 3 == 2' –

3

Вы собираетесь ненавидеть этот ответ за то, как это и очевидно, но вы можете просто сделать:

if index % 3 == 2: add a horizontal spacer 

Это добавляет распорку после 2-го элемента (который на самом деле третий), а каждый третий элемент после этого.

+0

Я этого не замечал - фантазия. Я заметил, что Даниэль прав, потому что он немного более явный, и это помогает мне в других ситуациях, которые не такие аккуратные и аккуратные;) – linus72982

+0

Его решение, безусловно, отличное. –

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

  • Нет связанных вопросов^_^