【问题标题】:Evenly Distributed Slice of Django QuerySet (or Python list)Django QuerySet(或 Python 列表)的均匀分布切片
【发布时间】:2013-04-16 19:26:09
【问题描述】:

我想从数据库中获取一些值并将它们中的“n”个切片,比如在图表上绘制。

我从 Django QuerySet 开始,但我不认为这是我可以通过 ORM 减少的东西,所以我可以获取值列表,然后使用 Python 中可用的任何库获取数据样本。

因此,如果我有一个包含一千个项目的数据集,我希望能够从该数据集中获取均匀分布的非随机样本范围,始终包括起点和终点,然后将元素均匀分布在之间。

例如,如果:

data = [x for x in xrange(0, 777)]

我想要其中的 10 个,我怎样才能得到一个列表,不是每 10 个项目,而是恰好十个列表项目,均匀分布在列表中的元素总数上?

我正在尝试:

number_of_results = 10
step = len(data) / number_of_results
data[::step]

但我希望有一种更有效的方法(以及一种保持终点并准确返回 number_of_results 个项目的方法,即使项目之间的步长不能完全均匀)。

【问题讨论】:

    标签: python django slice


    【解决方案1】:

    可能有更有效的方法,但这只是一个想法:

    qs_ids = list(ModelA.objects.order_by('id').values_list('id', flat=True))
    
    number_of_results = 10
    step = len(qs_ids) / number_of_results
    ids = data[::step]
    
    qs = ModelA.objects.filter(id__in=ids).order_by('id')
    

    【讨论】:

      猜你喜欢
      • 2011-11-30
      • 2011-04-08
      • 2012-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-07
      • 1970-01-01
      • 2021-12-16
      相关资源
      最近更新 更多