class PaginationHelper:
def __init__(self, collection, items_per_page):
'''The constructor takes in an array of items and a integer indicating
how many items fit within a single page'''
self.collection = collection
'''Given array'''
self.items_per_page = items_per_page
'''Given number of items that should be on a single page'''
self.result = [self.collection[i:i + self.items_per_page]
for i in range(0, len(self.collection), self.items_per_page)]
'''An array that orders our collection'''
def item_count(self):
'''Returns the number of items within the entire collection'''
return len(self.collection)
def page_count(self):
'''Returns the number of pages'''
return m.ceil(len(self.collection) / self.items_per_page)
def page_item_count(self, page_index):
'''Returns the number of items on the current page. page_index is zero based.
This method should return -1 for page_index values that are out of range.'''
self.page_index = page_index
try:
return len(self.result[page_index])
except IndexError:
return -1
def page_index(self, item_index):
'''Determines what page an item is on. Zero based indexes.
This method should return -1 for item_index values that are out of range'''
self.item_index = item_index
if item_index not in range(len(self.collection)):
return -1
item = self.collection[item_index]
for index, list_of_elements in enumerate(self.result):
if item in list_of_elements:
return index
else:
continue
collection = [3, 1, 6, 'g', 5, [], (), 0, 'sdf']
helper = PaginationHelper(collection, 2)
print(helper.collection)
print(helper.result)
print(helper.page_index(0))
Y2xhc3MgUGFnaW5hdGlvbkhlbHBlcjoKCiAgICBkZWYgX19pbml0X18oc2VsZiwgY29sbGVjdGlvbiwgaXRlbXNfcGVyX3BhZ2UpOgogICAgICAgICcnJ1RoZSBjb25zdHJ1Y3RvciB0YWtlcyBpbiBhbiBhcnJheSBvZiBpdGVtcyBhbmQgYSBpbnRlZ2VyIGluZGljYXRpbmcKICAgICAgICBob3cgbWFueSBpdGVtcyBmaXQgd2l0aGluIGEgc2luZ2xlIHBhZ2UnJycKICAgICAgICBzZWxmLmNvbGxlY3Rpb24gPSBjb2xsZWN0aW9uCiAgICAgICAgJycnR2l2ZW4gYXJyYXknJycKICAgICAgICBzZWxmLml0ZW1zX3Blcl9wYWdlID0gaXRlbXNfcGVyX3BhZ2UKICAgICAgICAnJydHaXZlbiBudW1iZXIgb2YgaXRlbXMgdGhhdCBzaG91bGQgYmUgb24gYSBzaW5nbGUgcGFnZScnJwogICAgICAgIHNlbGYucmVzdWx0ID0gW3NlbGYuY29sbGVjdGlvbltpOmkgKyBzZWxmLml0ZW1zX3Blcl9wYWdlXQogICAgICAgICAgICAgICAgICBmb3IgaSBpbiByYW5nZSgwLCBsZW4oc2VsZi5jb2xsZWN0aW9uKSwgc2VsZi5pdGVtc19wZXJfcGFnZSldCiAgICAgICAgJycnQW4gYXJyYXkgdGhhdCBvcmRlcnMgb3VyIGNvbGxlY3Rpb24nJycKCiAgICBkZWYgaXRlbV9jb3VudChzZWxmKToKICAgICAgICAnJydSZXR1cm5zIHRoZSBudW1iZXIgb2YgaXRlbXMgd2l0aGluIHRoZSBlbnRpcmUgY29sbGVjdGlvbicnJwogICAgICAgIHJldHVybiBsZW4oc2VsZi5jb2xsZWN0aW9uKQoKICAgIGRlZiBwYWdlX2NvdW50KHNlbGYpOgogICAgICAgICcnJ1JldHVybnMgdGhlIG51bWJlciBvZiBwYWdlcycnJwogICAgICAgIHJldHVybiBtLmNlaWwobGVuKHNlbGYuY29sbGVjdGlvbikgLyBzZWxmLml0ZW1zX3Blcl9wYWdlKQoKICAgIGRlZiBwYWdlX2l0ZW1fY291bnQoc2VsZiwgcGFnZV9pbmRleCk6CiAgICAgICAgJycnUmV0dXJucyB0aGUgbnVtYmVyIG9mIGl0ZW1zIG9uIHRoZSBjdXJyZW50IHBhZ2UuIHBhZ2VfaW5kZXggaXMgemVybyBiYXNlZC4KICAgICAgICBUaGlzIG1ldGhvZCBzaG91bGQgcmV0dXJuIC0xIGZvciBwYWdlX2luZGV4IHZhbHVlcyB0aGF0IGFyZSBvdXQgb2YgcmFuZ2UuJycnCiAgICAgICAgc2VsZi5wYWdlX2luZGV4ID0gcGFnZV9pbmRleAogICAgICAgIHRyeToKICAgICAgICAgICAgcmV0dXJuIGxlbihzZWxmLnJlc3VsdFtwYWdlX2luZGV4XSkKICAgICAgICBleGNlcHQgSW5kZXhFcnJvcjoKICAgICAgICAgICAgcmV0dXJuIC0xCgogICAgZGVmIHBhZ2VfaW5kZXgoc2VsZiwgaXRlbV9pbmRleCk6CiAgICAgICAgJycnRGV0ZXJtaW5lcyB3aGF0IHBhZ2UgYW4gaXRlbSBpcyBvbi4gWmVybyBiYXNlZCBpbmRleGVzLgogICAgICAgIFRoaXMgbWV0aG9kIHNob3VsZCByZXR1cm4gLTEgZm9yIGl0ZW1faW5kZXggdmFsdWVzIHRoYXQgYXJlIG91dCBvZiByYW5nZScnJwogICAgICAgIHNlbGYuaXRlbV9pbmRleCA9IGl0ZW1faW5kZXgKICAgICAgICBpZiBpdGVtX2luZGV4IG5vdCBpbiByYW5nZShsZW4oc2VsZi5jb2xsZWN0aW9uKSk6CiAgICAgICAgICAgIHJldHVybiAtMQogICAgICAgIGl0ZW0gPSBzZWxmLmNvbGxlY3Rpb25baXRlbV9pbmRleF0KICAgICAgICBmb3IgaW5kZXgsIGxpc3Rfb2ZfZWxlbWVudHMgaW4gZW51bWVyYXRlKHNlbGYucmVzdWx0KToKICAgICAgICAgICAgaWYgaXRlbSBpbiBsaXN0X29mX2VsZW1lbnRzOgogICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4CiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICBjb250aW51ZQoKCmNvbGxlY3Rpb24gPSBbMywgMSwgNiwgJ2cnLCA1LCBbXSwgKCksIDAsICdzZGYnXQpoZWxwZXIgPSBQYWdpbmF0aW9uSGVscGVyKGNvbGxlY3Rpb24sIDIpCgpwcmludChoZWxwZXIuY29sbGVjdGlvbikKcHJpbnQoaGVscGVyLnJlc3VsdCkKcHJpbnQoaGVscGVyLnBhZ2VfaW5kZXgoMCkp
[3, 1, 6, 'g', 5, [], (), 0, 'sdf']
[[3, 1], [6, 'g'], [5, []], [(), 0], ['sdf']]
0