python - 这是你分页的方式,还是有更好的算法?

标签 python pagination paging data-paging

我希望能够采用如下序列:

my_sequence = ['foo', 'bar', 'baz', 'spam', 'eggs', 'cheese', 'yogurt']

使用如下函数:

my_paginated_sequence = get_rows(my_sequence, 3)

得到:

[['foo', 'bar', 'baz'], ['spam', 'eggs', 'cheese'], ['yogurt']]

这是我想出来的:

def get_rows(sequence, num):
    count = 1
    rows = list()
    cols = list()
    for item in sequence:
        if count == num:
            cols.append(item)
            rows.append(cols)
            cols = list()
            count = 1
        else:
            cols.append(item)
            count += 1
    if count > 0:
        rows.append(cols)
    return rows

最佳答案

如果你知道你有一个可切片的序列(列表或元组),

def getrows_byslice(seq, rowlen):
    for start in xrange(0, len(seq), rowlen):
        yield seq[start:start+rowlen]

这当然是一个生成器,所以如果您绝对需要一个列表作为结果,您将使用 list(getrows_byslice(seq, 3))等等,当然。

如果你开始的是一个通用的可迭代对象,itertools recipes提供有关 grouper 的帮助食谱……:

import itertools

def grouper(n, iterable, fillvalue=None):
    "grouper(3, 'ABCDEFG', 'x') --> ABC DEF Gxx"
    args = [iter(iterable)] * n
    return itertools.izip_longest(fillvalue=fillvalue, *args)

(当然,如果列表是您想要的,您需要为此调用 list)。

由于您实际上希望截断而不是填充最后一个元组,因此您需要“修剪”最后一个元组的尾随填充值。

关于python - 这是你分页的方式,还是有更好的算法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3744451/

相关文章:

ios - Swift 2 - PDF 文档分页

python - 如何在 Linux 上将文件写入 RAM

随机顺序和分页 Elasticsearch

asp.net-mvc-3 - MVC3 razor Webgrid 分页和排序超过 2000 条记录

javascript - 没有 jQuery 的分页。如何选择具有相同类别的一系列元素?我的逻辑有道理吗?

javascript - twbsPagination totalPage 值总是在变化?

http - 空集合和 HTTP header 内容范围

Python 更新函数内的值并重用它

python - 为什么 append 方法在我的列表中返回 None?

python - 如何在文本文件中剪切行?