如何从 python 集中删除自定义对象的实例?

2023-11-30

我正在用 python 进行一些基本的卡/牌组操作。下面你可以看到我的 Card 类和 Deck 类。假设我知道有些牌已经死了,并且想将它们从牌组中删除。

import itertools

SUIT_LIST = ("h", "s", "d", "c")
NUMERAL_LIST = ("2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K", "A")

class Card:
    def __init__(self, numeral, suit):
        self.numeral = numeral
        self.suit = suit
        self.card = self.numeral, self.suit
    def __repr__(self):
        return self.numeral + self.suit

class Deck(set):
    def __init__(self):
        for numeral, suit in itertools.product(NUMERAL_LIST, SUIT_LIST):
            self.add(Card(numeral, suit))

deck = Deck()    
dead_card = Card('J','s')
deck.remove(dead_card)

引发以下错误:

Traceback (most recent call last):

  File "<ipython-input-93-06af62ea1273>", line 23, in <module>
    deck.remove(dead_card)

KeyError: Js

从我的套牌中移除死牌的正确方法是什么?为什么我的方法不起作用?


您将需要两种新方法Card类,为了使集合和字典中的成员资格能够正常工作:

class Card:
    ...
    def __hash__(self):
        return hash(self.card)
    def __eq__(self, other):
        if isinstance(other, Card):
            return self.card == other.card
        return NotImplemented

这是因为集合是通过以下方式实现的哈希表,除非您定义如何散列和比较自定义类的实例,否则基于的散列identity(CPython 中的内存位置)将用作默认值。使用id这里提供了一个相当蹩脚的默认值 - 两张具有相同数字/花色的牌不会被视为“相等”,并且在一个Deck不被识别。

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

如何从 python 集中删除自定义对象的实例? 的相关文章

随机推荐

  • 从 JS 中被拒绝的 Promise 中恢复

    我 大部分 使用本机承诺并尝试从错误中恢复并继续执行承诺链 实际上 我正在这样做 REST 查询以查看 ID 是否存在 请注意 这会返回一个延迟的 jquery then 成功表示ID存在 失败则停止 失败说明ID不存在 继续创建ID th
  • C#:C# 中是否有 Java 中的 TimerTask 的等效类?

    我正在寻找 C 中 Java 中是否有等效的 TimerTask 类 这里引用了Java的TimerTask http download oracle com javase 1 4 2 docs api java util TimerTas
  • CUDA纹理线性过滤

    在 CUDA C 编程指南第 5 版附录 E 2 线性滤波 中 指出 在这种过滤模式下 仅适用于浮点 纹理 纹理获取返回的值是 粗体部分让我感到困惑 做floating point仅指纹素类型 还是也指返回类型 例如 我声明了 3 个纹理
  • 如何使用谷歌翻译翻译整个网站

    我目前正在使用以下内容来翻译网页 http translate google com about intl en ALL tour html professional 问题是 当我将 Google 网站上生成的代码片段放到我的网页上时 用户
  • 创建可能案例的简单方法

    我有数据列表 例如 a 1 2 3 4 b a b c d e c 001 002 003 我想创建另一个新的列表 该列表由 a b c 的所有可能情况混合而成 如下所示 d 1a001 1a002 1a003 4e003 是否有任何模块或
  • 是否总是需要条件注释?

    在创建了一些网络应用程序之后 我真的认为一段时间后处理条件注释就不那么有趣了 对于这个问题有什么计划吗 处理不同的浏览器会更复杂还是更容易 某种形式的功能嗅探总是需要的 但希望将来这可以更多地基于更良性的脚本化对象嗅探形式 从而实现渐进增强
  • 如何比较两个日期时间字符串并返回小时数差异? (bash外壳)

    我可以使用以下代码在 php 中做到这一点 dt1 2011 11 11 11 11 11 t1 strtotime dt1 dt2 date Y m d H 00 00 t2 strtotime dt2 tDiff t2 t1 hDiff
  • 禁用鼠标中键单击

    我需要您帮助解决一个问题 即如何禁用鼠标中键单击任何链接以在 IE 7 8 9 中打开新选项卡 我尝试过很多类似的事情 return false e cancelBubble true e returnValue false 但无法阻止 I
  • 当一个 @Controller 扩展另一个 @Controller 时,“发现不明确的映射”

    我有一个ImportAction类 用作多个特定于类型的导入控制器的父类 例如ImportClientsAction and ImportServicesAction ImportAction是一个带有注释的 Spring MVC Cont
  • 无法加载资源:服务器响应状态为 409

    自动 WordPress 更新后 插件表单 联系表单 7 现在在其下方显示斜杠 并且不再触发 wpcf7mailsent 侦听器事件 因此在提交表单后不再将其重定向到感谢页面 此错误 服务器响应状态为 409 或也称为 net ERR AB
  • 在加载包含超过 6000 个项目的列表时,ConstraintLayout 与 RecyclerVIew (ListAdapter) 似乎会使用大量内存(高达 1GB)

    我正在为我的应用程序构建一个简单的 FileExplorer 并使用协程获取给定路径中的文件 并在显示它们时 内存使用量出现峰值 我在帖子底部显示了探查器工具选项卡 我最好的猜测是 适配器正在为列表中的每个项目创建一个视图持有者 并且使用应
  • C 中的 Double For 循环语法

    我是 C 新手 必须编写一些模拟给定函数的代码 但是 我很难明确地理解这段代码中的第二个 for 循环正在做什么 该语法似乎不遵循以下循环语法的标准 for init condition increment statement s 这是我正
  • Pandas-通过对列和索引的值求和来合并两个数据帧

    我想按索引和列合并两个数据集 我想合并整个数据集 df1 pd DataFrame 1 0 0 0 2 0 0 0 3 columns 1 2 3 df1 1 2 3 0 1 0 0 1 0 2 0 2 0 0 3 df2 pd DataF
  • 希望在 SVG 元素上结合 CSS 填充颜色和 SVG 图案

    我想利用 CSS 的强大功能来结合两件事来设计 SVG 元素的样式 填充颜色和纹理 我的纹理是使用具有描边但没有填充的 SVG 图案创建的 但即使该图案没有填充 它仍然不允许通过笔划看到 CSS 填充颜色 http jsfiddle net
  • iOS 中的 Facebook 分享对话框

    我正在努力实施本机共享对话框来自 Facebook 的示例应用程序 这样做似乎有些问题 到目前为止我所做的事情 包含最新的 Facebook SDK 包括 AdSupport 社交 帐户 安全和 libsqlite3 dylib 添加了来自
  • jQuery Sortable - 事件被调用太多次

    我有一个 x 类列表 该列表中有许多 y 类列表 可以将项目从任何子列表拖动到任何其他子列表 也可以安排子列表本身的顺序 我正在努力应对通过可排序触发的事件 接收 仅当某些内容从其他地方带入列表时才会触发 因此对于在子列表中排列项目或排列子
  • 为什么我的绝对/固定位置元素没有位于我期望的位置?

    我刚刚学习CSS中的定位 根据我发现有用的文章 我开始尝试 使用以下代码 我无法理解为什么绝对灰盒 div 位于其相对父级之外 我预计灰盒将位于容器的左上角 container background lightblue position r
  • Swift 泛型和协议不适用于 UIKit [可能的错误]

    TL DR gt 滚动到底部 在尝试使用 Swift 面向协议编程来标记 Apple 时 我在尝试实现类之间的委托模式时偶然发现了以下问题 我将从这个例子开始 protocol PhotoHandlerParent class UIView
  • 获取图标128*128文件类型C#

    我需要获取文件类型 doc 或 txt 的图标 它的大小应为 128 128 并以良好的质量保存为 png 或 ico 文件 I used Icon ico Icon ExtractAssociatedIcon d 1 txt pictur
  • 如何从 python 集中删除自定义对象的实例?

    我正在用 python 进行一些基本的卡 牌组操作 下面你可以看到我的 Card 类和 Deck 类 假设我知道有些牌已经死了 并且想将它们从牌组中删除 import itertools SUIT LIST h s d c NUMERAL