假设我有以下列表:
foo = ['a', 'b', 'c', 'd', 'e']
Run Code Online (Sandbox Code Playgroud)
从此列表中随机检索项目的最简单方法是什么?
我需要一个快速算法从通用列表中选择5个随机元素.例如,我想从a获得5个随机元素List<string>.
我目前有一个n大小的Python集,其中n> = 0.是否有快速的1或2行Python解决方案来做到这一点?例如,该集合将如下所示:
fruits = set(['apple', 'orange', 'watermelon', 'grape'])
Run Code Online (Sandbox Code Playgroud)
目标是从上面选择2个随机项目,上述集合可能包含0个,1个或更多项目.我能想到的唯一方法是将集合转换为列表(可变),从中可以访问集合长度内的2个随机唯一索引.
你知道是否有办法让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) 为了从未确定大小的数组中检索k个随机数,我们使用称为储层采样的技术.任何人都可以通过示例代码简要介绍它是如何发生的吗?
可能重复:
随机选择N个项目
我需要在1到49之间生成6个随机数,但它们不能相同.我知道如何让它们随机,我只是不确定如何确保它们不同.
工作表建议显示每个数字并将其设置为零,但我不知道这会有多大帮助.
任何意见是极大的赞赏.
PEP 424在“理由”中提到:
能够根据预期大小(由 估计)来预分配列表
__length_hint__可能是一项重大优化。据观察,CPython 运行某些代码的速度比 PyPy 更快,这纯粹是因为存在这种优化。
所以我问自己现在在这里问的问题:基于这些知识是否可以加快某些可迭代类处理迭代器的速度(当可以正确预测它的“长度”时)?
我有这个清单:
pics = [i for i in glob.glob("*.jpg")]
choice = random.choice(pics)
Run Code Online (Sandbox Code Playgroud)
并且列表下方的代码用于从列表中选择随机图像.我的问题是,它不是唯一的,很多图片重复..有没有办法克服这个?
我需要从csv文件中选择一个随机单词,我只是不知道如何启动它.所有单词都在一列中,但我想得到一个随机行,以便我可以输出一个随机单词.有什么想法吗?
我想从以下列表中获得 20 个随机结果:
coordinates = [
[20, 140], [40, 140], [60, 140], [80, 140], [100, 140], [120, 140],
[20, 120], [40, 120], [60, 120], [80, 120], [100, 120], [120, 120],
[20, 100], [40, 100], [60, 100], [80, 100], [100, 100], [120, 100],
[20, 80], [40, 80], [60, 80], [80, 80], [100, 80], [120, 80],
[20, 60], [40, 60], [60, 60], [80, 60], [100, 60], [120, 60],
[20, 40], [40, 40], [60, 40], [80, 40], [100, 40], [120, 40]
]
Run Code Online (Sandbox Code Playgroud)
我试过了, …
如果你从一个包含数百个或者数千个单独项目的列表开始,并且你希望Python随机选择一个(一次)(用于创建密文),那么它将是多么"随机"?由于应用程序的crypt0graphic性质,因此不存在相同项目(整数,字符串)的重复是非常重要的.但有没有办法自信地从字典中进行随机选择?
感谢您的建议,但这个问题并不是所列出的两种可能性的重复.一方面,选择的项目范围需要完全动态,但为了简洁起见,我限制了应用程序的机制描述,这是用于教育/娱乐目的而不是为了拯救世界; - )
random ×10
python ×9
algorithm ×2
list ×2
c# ×1
collections ×1
cryptography ×1
csv ×1
dictionary ×1
element ×1
generator ×1
numbers ×1
performance ×1
row ×1