Guest User

Untitled

a guest
Oct 16th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.09 KB | None | 0 0
  1. r"""
  2. >>> L = [1,2,3,4,5,6,7]
  3.  
  4.  
  5. Imperative
  6. ==========
  7.  
  8. >>> def f(L, c):
  9. ... matrix = []
  10. ... row = []
  11. ... for v in L:
  12. ... row.append(v)
  13. ... if len(row) == c:
  14. ... matrix.append(row)
  15. ... row = []
  16. ... if row:
  17. ... for i in range(c - len(row)):
  18. ... row.append(None)
  19. ... matrix.append(row)
  20. ... return matrix
  21. ...
  22. >>> def f(L, c):
  23. ... matrix = []
  24. ... for i in range(0, len(L), c):
  25. ... row = L[i:i+c]
  26. ... if len(row) < c:
  27. ... row.extend([None] * (c - len(row)))
  28. ... matrix.append(row)
  29. ... return matrix
  30. ...
  31. >>> f(L, 2)
  32. [[1, 2], [3, 4], [5, 6], [7, None]]
  33. >>> f(L, 3)
  34. [[1, 2, 3], [4, 5, 6], [7, None, None]]
  35. >>> f(L, 4)
  36. [[1, 2, 3, 4], [5, 6, 7, None]]
  37. >>> f(L, 7)
  38. [[1, 2, 3, 4, 5, 6, 7]]
  39.  
  40.  
  41. List comprehension
  42. ==================
  43.  
  44. >>> def f(L, c):
  45. ... return [L[i:i+c] + [None]*(i+c-len(L)) for i in range(0,len(L),c)]
  46. ...
  47. >>> f(L, 2)
  48. [[1, 2], [3, 4], [5, 6], [7, None]]
  49. >>> f(L, 3)
  50. [[1, 2, 3], [4, 5, 6], [7, None, None]]
  51. >>> f(L, 4)
  52. [[1, 2, 3, 4], [5, 6, 7, None]]
  53. >>> f(L, 7)
  54. [[1, 2, 3, 4, 5, 6, 7]]
  55.  
  56.  
  57. Recursive
  58. =========
  59.  
  60. >>> def f(L, c):
  61. ... return [L] if len(L)==c else [L+[None]*(c-len(L))] if len(L)<c else [L[:c]]+f(L[c:],c)
  62. ...
  63. >>> def f(L, c):
  64. ... return [L+[None]*(c-len(L))] if len(L)<=c else [L[:c]]+f(L[c:],c)
  65. ...
  66. >>> f(L, 2)
  67. [[1, 2], [3, 4], [5, 6], [7, None]]
  68. >>> f(L, 3)
  69. [[1, 2, 3], [4, 5, 6], [7, None, None]]
  70. >>> f(L, 4)
  71. [[1, 2, 3, 4], [5, 6, 7, None]]
  72. >>> f(L, 7)
  73. [[1, 2, 3, 4, 5, 6, 7]]
  74.  
  75.  
  76. Lazy evaluation
  77. ===============
  78.  
  79. >>> def f(L, c):
  80. ... if len(L) <= c:
  81. ... yield L + [None] * (c - len(L))
  82. ... else:
  83. ... yield L[:c]
  84. ... yield from f(L[c:], c)
  85. >>> list(f(L, 2))
  86. [[1, 2], [3, 4], [5, 6], [7, None]]
  87. >>> list(f(L, 3))
  88. [[1, 2, 3], [4, 5, 6], [7, None, None]]
  89. >>> list(f(L, 4))
  90. [[1, 2, 3, 4], [5, 6, 7, None]]
  91. >>> list(f(L, 7))
  92. [[1, 2, 3, 4, 5, 6, 7]]
  93.  
  94.  
  95. Iteration magic
  96. ===============
  97.  
  98. >>> def f(L, c):
  99. ... return list(zip(*[iter(L + ([] if len(L)%c==0 else [None]*(c-len(L)%c)))]*c))
  100. ...
  101. >>> def f(L, c):
  102. ... return list(zip(*[iter(L + ([None]*c)[:-(len(L)%c)])]*c))
  103. ...
  104. >>> f(L, 2)
  105. [(1, 2), (3, 4), (5, 6), (7, None)]
  106. >>> f(L, 3)
  107. [(1, 2, 3), (4, 5, 6), (7, None, None)]
  108. >>> f(L, 4)
  109. [(1, 2, 3, 4), (5, 6, 7, None)]
  110. >>> f(L, 7)
  111. [(1, 2, 3, 4, 5, 6, 7)]
  112. """
Add Comment
Please, Sign In to add comment