Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Python列表拆分为更小的列表?_Python_Google App Engine - Fatal编程技术网

将Python列表拆分为更小的列表?

将Python列表拆分为更小的列表?,python,google-app-engine,Python,Google App Engine,在Google App Engine查询中使用IN操作时,每个查询的列表中的项目数限制为30个,因此我必须找到一种方法,将列表拆分为多个列表,每个数组中最多包含30个项目,并查询每个子数组 我提出了一个小的解决方案,但它非常不雅观,我不确定这是否是最好的方法。我是Python新手,所以我想知道如何正确地或更优雅地执行此操作 我正在查询User.query(电子邮件中的User.email) 您可以这样做: l=range(105) step=30 print [l[i:i+step] for i

在Google App Engine查询中使用IN操作时,每个查询的列表中的项目数限制为30个,因此我必须找到一种方法,将列表拆分为多个列表,每个数组中最多包含30个项目,并查询每个子数组

我提出了一个小的解决方案,但它非常不雅观,我不确定这是否是最好的方法。我是Python新手,所以我想知道如何正确地或更优雅地执行此操作

我正在查询
User.query(电子邮件中的User.email)


您可以这样做:

l=range(105)
step=30
print [l[i:i+step] for i in range(0,len(l),step)]
您可以轻松将其转换为发电机:

>>> l=range(105)
>>> step=30
>>> g=(l[i:i+step] for i in range(0,len(l),step))
>>> g.next()
[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]
>>> g.next()
[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]

我的,你今晚很忙:)--把这一切都放在一个生成器中,你可以迭代并隐藏所有可怕的东西(虽然,这只是表面上的)…是的,我通常在需要时制作一个小生成器
def chunk\u list(l,chunksize=50)
。这是一个非常昂贵的查询。列表中的每个元素都会产生一个单独的查询。检查所有实体有时更便宜。@voscausa检查所有实体是什么意思?限制是存在的,因为执行如此多的查询是非常昂贵的。考虑重构,这样您就可以用键来查找实体,而不用查询。
l=range(105)
step=30
print [l[i:i+step] for i in range(0,len(l),step)]
>>> l=range(105)
>>> step=30
>>> g=(l[i:i+step] for i in range(0,len(l),step))
>>> g.next()
[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]
>>> g.next()
[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]