random.choice 被字典破坏

2024-02-26

The random.choice输入应该是sequence https://docs.python.org/3/glossary.html#term-iterable。这会导致奇怪的行为dict,它不是序列类型,但可以像这样使用下标:

>>> d = {0: 'spam', 1: 'eggs', 3: 'potato'}
>>> random.choice(d)
'spam'
>>> random.choice(d)
'eggs'
>>> random.choice(d)
'spam'
>>> random.choice(d)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/random.py", line 274, in choice
    return seq[int(self.random() * len(seq))]  # raises IndexError if seq is empty
KeyError: 2

此外random.choice根本不起作用set,以及其他一些容器collections module.

有充分的理由吗random.choice(d)不应该以明显的方式工作,返回随机密钥?

我考虑过random.choice(list(d)) and random.sample(d, 1)[0]但希望有更有效的方法。能random.choice在不降低序列当前行为的情况下进行改进?


你可以看到这个线程 http://bugs.python.org/issue15511132006 年的 Python bug 跟踪器上关于 random.choice 不适用于集合的问题。从算法上讲,可以使其以相同的渐近效率工作,但它需要 set/dict 数据结构的自定义支持,或者接口中的新方法。 python 开发人员认为不需要它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

random.choice 被字典破坏 的相关文章

随机推荐

  • SSRS 2008:如何在新页面上重复表格标题的一行

    我有一个包含 3 行标题的表格 我需要在新页面上重复第二行 除了第一页之外 页面中不需要第一行和第三行 如果我仅在第二行中设置属性 RepeatOnNewPage SSRS 将显示错误 TablixMember 必须具有与动态 Tablix
  • css动画持久结束状态

    我有一个 div 元素 它充当我的网页的全局容器 我在其中也有一个 div 元素 我将其用作窗帘 即当它被激活时 它会在黑暗的半透明层中覆盖整个页面 就像灯箱一样 因此该页面基本上已停用 并且可以在顶部显示警告对话框或图片框等 我可以使用j
  • 将特定的MDC字段附加到logstash日志中

    我正在尝试将自定义字段添加到 logback spring xml 中的 Logstash Appender 中 如下所示
  • Mongoose 填充包含 ref 的对象数组

    我有一个带有数组的猫鼬模式lists由对另一个集合的引用和嵌套的数字数组组成的对象 var Schema exports mongoose schema mongoose require mongoose Schema mongoose S
  • 构造函数注入——我们也注入工厂吗?

    听完后整洁代码讲座 https www youtube com playlist list PL693EFD059797C21E 我开始明白我们应该使用工厂来组合对象 因此 举例来说 如果House has a Door and a Doo
  • Camel 中的无限循环 - Rabbitmq

    我有一个小型服务器路由 它从queue in 获取消息并放入queue out 当我输入一条消息时queue in 服务器无限循环运行 我想知道我在配置方面缺少什么 这看起来是一条非常简单的路线 小服务器路由
  • IntelliJ 找不到 Scanner 类 [重复]

    这个问题在这里已经有答案了 我正在使用 Intellij IDEA 这是我的代码 public static void main String args java util Scanner scanner new java util Sca
  • 如何在Python中使用多线程时获得更快的速度

    现在我正在研究如何尽快从网站获取数据 为了获得更快的速度 我正在考虑使用多线程 这是我用来测试多线程和简单帖子之间差异的代码 import threading import time import urllib import urllib2
  • 如何在 Firefox 3.0 的 Javascript 中调用 Web 服务

    我在使用 Firefox 调用 Net Web 服务时遇到问题 客户 一个简单的例子对我来说就足够了 服务器端代码是这样的 WebService Namespace http tempuri org WebServiceBinding Co
  • 下一个可用记录 ID

    user User new user id返回零 但我需要在保存之前知道它 是否可以 是的你可以 我有同样的问题并调查了文档 能否解决这个问题其实和你的数据库类型有很大关系 Oracle and PostgreSQL确实有有用的功能可以轻松
  • RSA-OAEP SHA-512 加密/解密从 Javascriptwebcrypt api 到 PHP openssl?

    我一直忙于尝试使用 webcrypto api 和使用 openssl 的 PHP 服务器在浏览器客户端之间建立安全交换 我已经尽可能地分解了 事情 我编写了一些 javascript 来生成密钥对 打印出私有值和公共值 加密一个简单的字符
  • 过滤所有查询(试图实现软删除)

    我正在尝试在 EF Core 2 0 中实现软删除行为 public interface ISoftDeleteModel bool IsDeleted get set 创建正确的列和软删除工作正常 但从 DbContext 过滤实体则不然
  • 为什么从 iPhone 模拟器发送文件到 watchOS2 模拟器不起作用?

    我试图将数据库从 iOS 9 iPhone 复制到 watchOS 2 Apple Watch 两个模拟器 但什么也没有 找不到文件 到处搜查 我想在从 iPhone 输入应用程序到 Apple Watch 时传输数据库 即使仅 iPhon
  • 如何设置目录分隔符以匹配操作系统?

    我正在编写一个 qt 应用程序 目标是可移植到 3 个主要操作系统 我正在使用 QFileDialog 选择一个文件夹 然后将其添加到 QListWidget 中 然而 即使我在 Windows 上 文件夹名称也会返回为 E media 我
  • Java Toolkit 屏幕分辨率降低

    我正在使用 java 来获取屏幕的尺寸和分辨率 当我运行以下代码时 我得到以下输出 Toolkit toolkit Toolkit getDefaultToolkit Dimension dim toolkit getScreenSize
  • 在 ubuntu 上的 R 中使用 cairo 设备时出错

    我正在开罗设备上工作 我正在生成 cairo pdf 并收到如下所示的错误消息 cairo pdf DATA Warning messages 1 In cairo pdf DATA unable to load shared object
  • 同时显示同一文档的多个视图

    如何说服 MFC 文档 视图体系结构让我同时显示同一文档的两个不同视图 例如 说我的CDocument子类代表某种描述的档案 我想要一个用户界面 其中该存档中的所有条目的名称都显示在CListView子类显示在左侧窗格中 而当前所选条目的详
  • Python:函数需要 1 个位置参数,但给出了 2 个位置参数,怎么办?

    我正在用 Tk 用 python 创建一个数独游戏 我收到关于按钮按键功能的错误 from random import randint from tkinter import class sudoku global root result
  • Visual Studio Code - 多个屏幕中同一项目的选项卡(编辑器)

    使用多个屏幕 我通常将多个类 文件 放置在不同的屏幕中 这在重构 检查测试和比较更改时对我有很大帮助 Visual Studio Code 不允许我将选项卡拖到窗口外并在 例如 另一个监视器中查看它 我检查了文档和插件 但我发现的唯一方法是
  • random.choice 被字典破坏

    The random choice输入应该是sequence https docs python org 3 glossary html term iterable 这会导致奇怪的行为dict 它不是序列类型 但可以像这样使用下标 gt g