1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
from itertools import islice, tee
def chunks(seq, n):
# islice is MUCH slower than slice for lists and tuples.
if isinstance(seq, (list, tuple)):
i = 0
item = seq[i:i+n]
while item:
yield list(item)
i += n
item = seq[i:i+n]
else:
it = iter(seq)
item = list(islice(it, n))
while item:
yield item
item = list(islice(it, n))
def pairwise(iterable):
a, b = tee(iterable)
next(b, None)
return zip(a, b)
def column_chunks(columns, n):
for column in columns:
if not isinstance(column, (list, tuple)):
raise TypeError(
'Unsupported column type: {}. list or tuple is expected.'
.format(type(column))
)
# create chunk generator for every column
g = [chunks(column, n) for column in columns]
while True:
# get next chunk for every column
item = [next(column, []) for column in g]
if not any(item):
break
yield item
# from paste.deploy.converters
def asbool(obj):
if isinstance(obj, str):
obj = obj.strip().lower()
if obj in ['true', 'yes', 'on', 'y', 't', '1']:
return True
elif obj in ['false', 'no', 'off', 'n', 'f', '0']:
return False
else:
raise ValueError('String is not true/false: %r' % obj)
return bool(obj)
|