我希望能够采用如下序列:
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/