使用分页遍历列表的算法?

标签 algorithm pagination

我正在尝试提出一种算法,通过分页遍历列表。

我只对初始索引和“页面”的大小感兴趣。

例如,如果我的列表有 100 个项目,页面长度为 10:

1st page:  starts at 0, length 10
2nd page:  starts at 11, length 10
3rd page:  starts at 21, length 10
...
Nth page:  starts at 90, length 10

我的问题是想出一个优雅的解决方案来满足这些情况:

1. list has 9 elements, page length is 10

       1st page:  starts at 0, length 9

2. list has 84 elements, page length is 10

      1st page:  starts at 0, length 10
      2nd page:  starts at 11, length 10
      3rd page:  starts at 21, length 10
      ...
      Nth page:  starts at 80, length 4

我可以用一堆条件和模运算来做到这一点,但我想知道是否有人可以提供更好/优雅的方法来解决这个问题。

谢谢!

最佳答案

下面是一些在 Python 中完成它的代码,也可以用于其他语言;其次是中级 Pythoneer 如何以更易于维护的方式完成它:

>>> from pprint import pprint as pp
>>> n, perpage = 84, 10
>>> mylist = list(range(n))
>>> mylist[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> mylist[-10:] # last ten items
[74, 75, 76, 77, 78, 79, 80, 81, 82, 83]
>>> sublists = []
>>> for i in range(n):
    pagenum, offset = divmod(i, perpage)
    if offset == 0:
        # first in new page so create another sublist
        sublists.append([])
    # add item to end of last sublist
    sublists[pagenum].append(i)


>>> pp(sublists)
[[0, 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, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
 [80, 81, 82, 83]]
>>> # Alternatively
>>> sublists2 = [mylist[i:i+perpage] for i in range(0, n, perpage)]
>>> pp(sublists2)
[[0, 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, 58, 59],
 [60, 61, 62, 63, 64, 65, 66, 67, 68, 69],
 [70, 71, 72, 73, 74, 75, 76, 77, 78, 79],
 [80, 81, 82, 83]]
>>> 

关于使用分页遍历列表的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16329539/

相关文章:

arrays - 有人可以向我解释数组的 Big Oh 复杂性吗?我不太明白他们是如何工作的

php - Laravel 分页与数据表性能

java - 列表Java Spring中的分页

php - 如何使用 PHP 在 Google Analytics Core reporting API V4 上设置维度别名

c# - CLRS 快速排序 - 无法正常工作

c - 过滤数组的有效方法是什么

c++ - value_comp 和 * 位于迭代器之前

iphone - .plist 中的可变字符串集合,替代方案?

javascript - WordPress 分页 <a> 链接单击并更改为 "active"但不重定向

sql-server - SQL Server,对多个表使用UNION ALL然后分页实现