我正在将一些数据从 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)

最佳答案

以下应该工作:

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。 (请注意,limit + offset 是否大于列表的长度并不重要。selection[10:100000000] 将默认上升到列表的末尾)。
  • 关于python - 使用偏移量和限制对数组进行切片,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14698455/

    10-15 12:54