如何从列表中分组为五个元素?

2 投票
4 回答
3259 浏览
提问于 2025-04-16 22:36

我的GAE应用程序可以接收多个文件上传(数量从0到N都有可能)。我在一个叫做files_arguments的列表里存放这些文件:

files_arguments = self.request.arguments()

我需要先处理前5个文件,然后再处理接下来的5个,以此类推。最后一组文件可能会少于5个。

那么,应该怎么写代码来实现这个功能呢?(处理完后我不会再用到files_arguments,所以可以在处理后把列表里的元素删除)

4 个回答

1
def pickN( mylist, N=5 ):
    if ( len(mylistl) < N) return mylist
    a = mylist[0:N]
    for _ in range(N): mylist.pop(0)
    return a

当然可以!请把你想要翻译的内容发给我,我会帮你用简单易懂的语言解释清楚。

3

正如在zip的文档中所说

迭代对象的从左到右的评估顺序是有保证的。这使得可以使用zip(*[iter(s)]*n)的方式将数据系列分成n个长度的组。

所以完整的组是zip(*[iter(files_arguments)]*5),而最后的短组(如果有的话)是files_arguments[-len(files_arguments)%5:]

FMc的回答在这个情况下更简单易懂,但我觉得用zip来分组的方式很有趣,所以在这里提一下。

6

这里有一种简单的方法。如果最后一组的数据少于 n,它也不会把这组数据丢掉。

n = 5
groups = [files_arguments[i:i + n] for i in range(0, len(files_arguments), n)]

撰写回答