你知道是否有办法让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) 如何使用Django获得两个不同的随机记录?我已经看到了关于如何获得一个的问题,但我需要获得两个随机记录,它们必须不同.
给定一个带有自动设置"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()必须支持迭代'异常
有帮助吗?
我试图从模型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]中误解了什么吗?
我在主页上显示 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 张照片。这并不奇怪。产品已经被提取后,我可以手动预提取相关对象吗?