相关疑难解决方法(0)

带有generator/iterable/iterator的Python随机样本

你知道是否有办法让python random.sample与生成器对象一起工作.我试图从一个非常大的文本语料库中获取随机样本.问题是random.sample()引发以下错误.

TypeError: object of type 'generator' has no len()
Run Code Online (Sandbox Code Playgroud)

我在想,也许有一些方法itertools可以用来自某些东西来做这件事但却找不到任何有点搜索的东西.

一个有点组成的例子:

import random
def list_item(ls):
    for item in ls:
        yield item

random.sample( list_item(range(100)), 20 )
Run Code Online (Sandbox Code Playgroud)

UPDATE


按照MartinPieters的要求,我做了目前提出了三种方法的一些具体时机.结果如下.

Sampling 1000 from 10000
Using iterSample 0.0163 s
Using sample_from_iterable 0.0098 s
Using iter_sample_fast 0.0148 s

Sampling 10000 from 100000
Using iterSample 0.1786 s
Using sample_from_iterable 0.1320 s
Using iter_sample_fast 0.1576 s

Sampling 100000 from 1000000
Using iterSample 3.2740 s
Using sample_from_iterable 1.9860 s
Using …
Run Code Online (Sandbox Code Playgroud)

python random generator

38
推荐指数
3
解决办法
2万
查看次数

如何用Django获取两个随机记录

如何使用Django获得两个不同的随机记录?我已经看到了关于如何获得一个的问题,但我需要获得两个随机记录,它们必须不同.

python random django sql-order-by django-models

29
推荐指数
4
解决办法
1万
查看次数

Django选择最大ID

给定一个带有自动设置"id"的标准模型(称为Image),如何获得最大ID?

到目前为止,我已经尝试过:

max_id = Image.objects.all().aggregate(Max('id'))
Run Code Online (Sandbox Code Playgroud)

但我得到'id__max'键错误.

max_id = Image.objects.order_by('id')[0].id
Run Code Online (Sandbox Code Playgroud)

给出一个'参数2到map()必须支持迭代'异常

有帮助吗?

python django

24
推荐指数
3
解决办法
2万
查看次数

Django得到一个随机对象

我试图从模型A中获取一个随机对象

目前,它正在使用此代码:

random_idx = random.randint(0, A.objects.count() - 1)
random_object = A.objects.all()[random_idx]
Run Code Online (Sandbox Code Playgroud)

但我觉得这段代码更好:

random_object = A.objects.order_by('?')[0]
Run Code Online (Sandbox Code Playgroud)

哪一个是最好的?使用第一个代码删除对象可能出现问题?因为,例如,我可以有10个对象但是数字10作为id的对象不再存在?我在A.objects.all()[random_idx]中误解了什么吗?

python random django object

4
推荐指数
4
解决办法
3722
查看次数

如何为已获取的列表预获取相关对象?

我在主页上显示 7 个随机对象。为此,我使用基于此答案的解决方案:

class ProductManager(models.Manager):
    def random(self, n_products, filter={}, select_related=None):
        n_products_total = self.filter(**filter).count()
        if n_products_total == 0:
            return []
        r = [self.random_impl(n_products_total, filter, select_related) for i in range(n_products)]
        return [p for p in r if p is not None]

    def random_impl(self, n_products, filter, select_related=None):
        random_index = randint(0, n_products - 1)
        try:
            return self.filter(**filter) \
                .select_related(select_related)[random_index]
        except IndexError:
            return None

random_products = Product.objects.random(7, filter={'enabled': True}, select_related='category')
Run Code Online (Sandbox Code Playgroud)

如果我传递prefetch_related=Prefetch('productphoto_set', queryset=ProductPhoto.objects.order_by('pk'))random_impl方法,它会为每个产品一次预取 1 张照片。这并不奇怪。产品已经被提取后,我可以手动预提取相关对象吗?

django django-models django-orm

4
推荐指数
1
解决办法
2276
查看次数