3

我正在将 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)
4

2 回答 2

12

以下应该有效:

def sampling(selection, offset=0, limit=None):
    return selection[offset:(limit + offset if limit is not None else None)]

这有三个原因:

  1. 无需检查偏移量是否为0(如果为0,则从头开始)

  2. selection[offset:None]offset列表的末尾开始

  3. 如果限制是整数,则(limit + offset if limit else None)可以使用三元运算符,如果不是。(请注意,如果大于列表的长度并不重要。将默认到列表的末尾)。limit + offsetNonelimit + offsetselection[10:100000000]

于 2013-02-05T01:02:51.040 回答
4
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))
于 2013-02-05T01:22:31.880 回答