Я ищу элегантный «Pythonic» способ циклического ввода в группы определенного размера. Но размер групп меняется, и вы не знаете размер определенной группы, пока не начнете синтаксический разбор.Python нерегулярная петля
На самом деле я забочусь только о группах двух размеров. У меня есть большая последовательность входных данных, которые входят в группы большей части размера X, но иногда имеют размер Y. В этом примере можно сказать, что X = 3 и Y = 4 (моя фактическая проблема - X = 7 и Y = 8). Я не знаю до середины группы элементов, если это будет группа размера X или элементов размера Y.
В моей проблеме я имею дело с строками ввода, но для упрощения я проиллюстрирую символы.
Так что, если это группа определенного размера, я знаю, что всегда буду вводить вход в той же последовательности. Например, если это группа размера X, я получаю элементы типа [a, a, b], но если это группа размера Y, я получаю элементы типа [a, a, c, b]. f это что-то типа «a». Я хочу обработать его определенным образом и «b» другой и т. д.
Очевидно, мне нужно в какой-то момент проверить элемент, чтобы определить, относится ли это группа типа 1 или Другие. Как показано выше, я не могу просто проверить тип каждого элемента, потому что в последовательности могут быть два одинаковых. Кроме того, группы могут быть одной и той же моделью в начале и только отличаться ближе к концу. В этом примере самое раннее, что я могу проверить, есть ли у меня размер X или размер группы Y, проверяя третий элемент (чтобы увидеть, имеет ли он тип «c» или тип «b»).
У меня есть решение с циклом for с открытым индексом и двумя дополнительными переменными, но мне интересно, есть ли более элегантное решение.
Вот мой код.Я поставил pass
заявление на месте, где я хотел бы сделать фактический разбор в зависимости от того, какого типа он:
counter = 0
group = 3
for index, x in enumerate("aabaabaacbaabaacbaabaab"):
column = index - counter;
print(str(index) + ", " + x + ", " + str(column))
if column == 0:
pass
elif column == 1:
pass
elif column == 2:
if x == 'c':
pass
elif x == 'd':
group = 4
elif column == 3:
pass
if column + 1 == group:
counter += group
group = 3
В примере коды входной поток aabaabaacbaabaacbaabaab
так что группы:
- AAB (3)
- AAB (3)
- aacb (4)
- AAB (3)
- aacb (4)
- AAB (3)
- AAB (3)
Не могли бы вы а) дать более короткое, точное описание проблемы и b) предоставить [MCVE] (http://stackoverflow.com/help/mcve)? Я пытался три раза прочесть ваш вопрос и не мог расшифровать вопрос. – timgeb
В основном я потребляю последовательность ввода, которую я знаю, это два типа групп. По мере того, как я просматриваю входные данные, я буду в состоянии работать, если я буду в одной группе или другой. Несмотря на то, что у меня есть что-то, что работает в моем текущем решении, я чувствую, что дополнительные переменные - это что-то, что будет в стиле C/Java для цикла с аргументами case, но оно неудобно в Python. – freshnewpage