- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我知道您可以通过多种方式从字典中选择一个随机值。
在 Python 2 中:
random.choice(d.keys())
在 Python 3 中:
random.choice(list(d.keys()))
尽管如此,这两种方法都需要在随机选择之前转换为列表,即线性时间 O(n)。例如,我知道在 Python 3 中 d.keys()
返回一个迭代器,我猜测在 Python 3 中列表是在内部从字典创建的。
是否可以在恒定时间内从字典中选择一个值,即 O(1)?
编辑:对于到目前为止的评论,我认为这是不可能的,至少不是直接的方式。需要辅助结构。
编辑 2: 我认为字典可以在常数时间内随机选择,因为它在内部是一个哈希表,即在内部它必须有一个数组或相似的东西。当然,这取决于内部实现,但理论上我认为是可以的。
最佳答案
next(islice(d.values(),np.random.randint(0, len(d)-1),None)) 是我发现从 dict d 中选择随机值的最佳性能方法Python 3。这在下面的讨论中解释。
一些标准库随机方法比类似的 numpy.random 方法需要更多的运行时间。例如:
import numpy as np
timeit random.randint(0, 10)
100000 loops, best of 3: 2.52 µs per loop
timeit np.random.randint(0, 10)
1000000 loops, best of 3: 453 ns per loop
使用 numpy.random.randint 可以提高选择字典随机值的方法的运行时间:
from itertools import islice
import random
d = {1:'a',2:'b',3:'c',4:'d',5:'e',6:'f',7:'g',8:'h',9:'i',10:'j'}
timeit next(islice(d.values(),random.randint(0, len(d)-1),None))
100000 loops, best of 3: 3.58 µs per loop
timeit next(islice(d.values(),np.random.randint(0, len(d)-1),None))
100000 loops, best of 3: 1.26 µs per loop
# d[5] access time is about 25X smaller than 1.26 µs
timeit d[5]
10000000 loops, best of 3: 51.3 ns per loop
def take_nth(sequence, n):
i = iter(sequence)
for _ in range(n):
next(i)
return next(i)
timeit d[take_nth(d.keys(), random.randint(0, len(d)-1))]
100000 loops, best of 3: 5.07 µs per loop
timeit d[take_nth(d.keys(), np.random.randint(0, len(d)-1))]
100000 loops, best of 3: 2.66 µs per loop
关于python - 在 Python 3 中以恒定时间从字典中选择随机值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32802869/
要求: 我们在数据库中有值 Chennai Baroda Bangalore New Delhi São Paulo, Lisboa San Jose 等... 所以我想将这些字符串转换成一个唯一的短
我需要通过 TCP 加密和发送数据(每条消息从几百字节到几百兆字节)以 block 从 Java 到 C++ 程序,并且需要发送的大小提前发送数据,以便收件人知道何时停止读取当前消息并处理它,然后等待
我不太知道如何问这个问题,因此我将其作为示例: 想象在一个应用程序中您有一个Country对象。此对象有两个属性:Name和'Bordering Countries'集合。稍后可能会添加更多属性,但这
我们正在尝试使用 IoT 中心、流分析和表存储来处理仪表板上的事件驱动图标(开/关/事件)。我无法让实际过程在 6 秒内完成。流分析的水印恒定为 5 秒。该网站声称即时处理。 https://azur
我正在尝试获取一个 JTabbedPane,其中所有选项卡(实际选项卡,而不是组件)具有相同的宽度(最宽标签所需的最小宽度或恒定宽度)。 我试图覆盖 BasicTabbedPaneUI.getTabB
你好安卓开发者, 我正在使用 OpenGLES 1.0 在 Eclipse 中为 Android 开发一个简单的游戏。我正在使用 Samsung Galaxy S2 Android(2.3) 作为开发
我正在尝试使用 ColorMatrix 为整个图像设置一个恒定的色调值。我的目标是使整个图像看起来颜色相同,而不会失去任何区域的亮度。我找到了一种使用 ColorMatrix 来移动图像的色调值的方法
我最近将我的 Postgres 数据库从 Windows 迁移到 CentOS 6.7。在 Windows 上,数据库从不使用太多 CPU,但在 Linux 上,我看到它使用恒定的 ~30% CPU(
你好,我正在用 SDL2 开发一款很棒的游戏,我添加了一个 FPS 调节器以使其在每台机器上都能流畅运行,但后来我创建了一个示例程序来输出 fps(不是调节,只是输出以查看电流的功率机器运行 ) 我在
我在 IntelliJ IDEA 13.0 中开发了一个应用程序,但是当我在我的设备上运行该应用程序时,它会不断等待调试器(如果我在 Debug模式下运行,调试器连接时没问题)但是如果远离计算机,我无
我想在 stat_密度2 图中绘制多个组,其中 alpha 值与每组中的观察计数相关。然而,由 stat_密度2d 形成的水平似乎已标准化为每组中的观察数量。例如, temp <- rbind(mov
我是一名优秀的程序员,十分优秀!