несинтаксический анализ ()? Просто ребячество, я пошел бы с toQueryString ()
Вы можете использовать понимание списка:
>>> seg_length = 3
>>> a = range(10)
>>> [a[x:x+seg_length] for x in range(0,len(a),seg_length)]
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
Как вам нужно использовать вывод? Если вам нужно только выполнить итерацию по нему, вам лучше создать итерацию, которая дает ваши группы:
def split_by(sequence, length):
iterable = iter(sequence)
def yield_length():
for i in xrange(length):
yield iterable.next()
while True:
res = list(yield_length())
if not res:
return
yield res
Пример использования:
>>> alist = range(10)
>>> list(split_by(alist, 3))
[[0, 1, 2], [3, 4, 5], [6, 7, 8], [9]]
Это использует гораздо меньше памяти, чем попытка создать весь список в памяти сразу, если вы только перебираете результат, потому что он создает только одно подмножество за раз:
>>> for subset in split_by(alist, 3):
... print subset
...
[0, 1, 2]
[3, 4, 5]
[6, 7, 8]
[9]
не тот результат, я все еще думаю, что функция группировщика полезна:
from itertools import izip_longest
def grouper(iterable, n, fillvalue=None):
args = [iter(iterable)] * n
return izip_longest(*args, fillvalue=fillvalue)
для Python2.4 и 2.5, у которых нет izip_longest:
from itertools import izip, chain, repeat
def grouper(iterable, n, padvalue=None):
return izip(*[chain(iterable, repeat(padvalue, n-1))]*n)
некоторая демонстрация код и вывод:
alist = range(10)
print list(grouper(alist, 3))
вывод: [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9, None, None)]