我正在将一些数据从SqlAlchemy选择迁移到项目ID的缓存中。
我正在试图找出处理附加了限制和偏移量的迁移功能的最佳方法。
我下面的代码工作正常。我担心它需要7行 - 通常当这样的事情需要几行时,这是因为我没有看到某些东西或者有些东西关于Python我忘记了或者还没有学过。
def sampling( selection, offset=0 , limit=None ):
if offset or limit:
if limit is not None:
limit = offset + limit
else:
limit = len(selection)
selection = selection[offset:limit]
return selection
ids = range(1,100)
print sampling(ids,1,20)
print sampling(ids,10,20)
print sampling(ids,90)
print sampling(ids,90,300)
答案 0 :(得分:7)
以下内容应该有效:
def sampling(selection, offset=0, limit=None):
return selection[offset:(limit + offset if limit is not None else None)]
这有三个原因:
无需检查偏移量是否为0(如果它为0,则从头开始)
selection[offset:None]
从offset
转到列表末尾
如果限制是整数,则三元运算符(limit + offset if limit else None)
允许您使用limit + offset
,如果不是,则允许使用None
。{li>
(请注意,如果limit + offset
大于列表的长度并不重要。selection[10:100000000]
将默认上升到列表的末尾。
答案 1 :(得分:3)
from itertools import islice
def sampling(selection, offset=0, limit=None):
return islice(islice(selection, offset, None), limit)
或者如果您需要列表而不是可迭代的
def sampling(selection, offset=0, limit=None):
return list(islice(islice(selection, offset, None), limit))