Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- r"""
- >>> L = [1,2,3,4,5,6,7]
- Imperative
- ==========
- >>> def f(L, c):
- ... matrix = []
- ... row = []
- ... for v in L:
- ... row.append(v)
- ... if len(row) == c:
- ... matrix.append(row)
- ... row = []
- ... if row:
- ... for i in range(c - len(row)):
- ... row.append(None)
- ... matrix.append(row)
- ... return matrix
- ...
- >>> def f(L, c):
- ... matrix = []
- ... for i in range(0, len(L), c):
- ... row = L[i:i+c]
- ... if len(row) < c:
- ... row.extend([None] * (c - len(row)))
- ... matrix.append(row)
- ... return matrix
- ...
- >>> f(L, 2)
- [[1, 2], [3, 4], [5, 6], [7, None]]
- >>> f(L, 3)
- [[1, 2, 3], [4, 5, 6], [7, None, None]]
- >>> f(L, 4)
- [[1, 2, 3, 4], [5, 6, 7, None]]
- >>> f(L, 7)
- [[1, 2, 3, 4, 5, 6, 7]]
- List comprehension
- ==================
- >>> def f(L, c):
- ... return [L[i:i+c] + [None]*(i+c-len(L)) for i in range(0,len(L),c)]
- ...
- >>> f(L, 2)
- [[1, 2], [3, 4], [5, 6], [7, None]]
- >>> f(L, 3)
- [[1, 2, 3], [4, 5, 6], [7, None, None]]
- >>> f(L, 4)
- [[1, 2, 3, 4], [5, 6, 7, None]]
- >>> f(L, 7)
- [[1, 2, 3, 4, 5, 6, 7]]
- Recursive
- =========
- >>> def f(L, c):
- ... return [L] if len(L)==c else [L+[None]*(c-len(L))] if len(L)<c else [L[:c]]+f(L[c:],c)
- ...
- >>> def f(L, c):
- ... return [L+[None]*(c-len(L))] if len(L)<=c else [L[:c]]+f(L[c:],c)
- ...
- >>> f(L, 2)
- [[1, 2], [3, 4], [5, 6], [7, None]]
- >>> f(L, 3)
- [[1, 2, 3], [4, 5, 6], [7, None, None]]
- >>> f(L, 4)
- [[1, 2, 3, 4], [5, 6, 7, None]]
- >>> f(L, 7)
- [[1, 2, 3, 4, 5, 6, 7]]
- Lazy evaluation
- ===============
- >>> def f(L, c):
- ... if len(L) <= c:
- ... yield L + [None] * (c - len(L))
- ... else:
- ... yield L[:c]
- ... yield from f(L[c:], c)
- >>> list(f(L, 2))
- [[1, 2], [3, 4], [5, 6], [7, None]]
- >>> list(f(L, 3))
- [[1, 2, 3], [4, 5, 6], [7, None, None]]
- >>> list(f(L, 4))
- [[1, 2, 3, 4], [5, 6, 7, None]]
- >>> list(f(L, 7))
- [[1, 2, 3, 4, 5, 6, 7]]
- Iteration magic
- ===============
- >>> def f(L, c):
- ... return list(zip(*[iter(L + ([] if len(L)%c==0 else [None]*(c-len(L)%c)))]*c))
- ...
- >>> def f(L, c):
- ... return list(zip(*[iter(L + ([None]*c)[:-(len(L)%c)])]*c))
- ...
- >>> f(L, 2)
- [(1, 2), (3, 4), (5, 6), (7, None)]
- >>> f(L, 3)
- [(1, 2, 3), (4, 5, 6), (7, None, None)]
- >>> f(L, 4)
- [(1, 2, 3, 4), (5, 6, 7, None)]
- >>> f(L, 7)
- [(1, 2, 3, 4, 5, 6, 7)]
- """
Add Comment
Please, Sign In to add comment