类型错误:“tuple”和“str”实例之间不支持“<”

2023-11-27

我有一个构建哈夫曼树的方法,如下所示:

def buildTree(tuples) :
    while len(tuples) > 1 :
        leastTwo = tuple(tuples[0:2])                  # get the 2 to combine
        theRest  = tuples[2:]                          # all the others
        combFreq = leastTwo[0][0] + leastTwo[1][0]     #enter code here the branch points freq
        tuples   = theRest + [(combFreq,leastTwo)]     # add branch point to the end
        tuples.sort()                                  # sort it into place
    return tuples[0]            # Return the single tree inside the list

但是当我向函数提供以下参数时:

[(1, 'b'), (1, 'd'), (1, 'g'), (2, 'c'), (2, 'f'), (3, 'a'), (5, 'e')]

我得到的错误是

  File "<stdin>", line 7, in buildTree
    tuples.sort()
TypeError: '<' not supported between instances of 'tuple' and 'str'

在调试时我发现错误在tuples.sort().


抛出错误是因为您正在创建内部节点(priority, (node, node))形式。对于相同的优先级,Python 然后尝试比较叶节点中的符号(因此 a 中的第二个元素(priority, symbol)节点元组)与(node, node)来自内部节点的元组:

>>> inner = (combFreq, leastTwo)
>>> inner
(2, ((1, 'b'), (1, 'd')))
>>> theRest[1]
(2, 'c')
>>> theRest[1] < inner
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'tuple'

为了构建哈夫曼树,如果你想对节点数组进行排序,你只需要按优先级排序,忽略其余的元组(符号或子节点):

tuples.sort(key=lambda t: t[0])

通过该修正,您的buildTree()函数生成一棵树:

>>> buildTree([(1, 'b'), (1, 'd'), (1, 'g'), (2, 'c'), (2, 'f'), (3, 'a'), (5, 'e')])
(15, ((6, ((3, 'a'), (3, ((1, 'g'), (2, 'c'))))), (9, ((4, ((2, 'f'), (2, ((1, 'b'), (1, 'd'))))), (5, 'e')))))

就我个人而言,我会使用优先级队列,以避免每次都进行排序。看如何在Python中实现优先级队列?

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

类型错误:“tuple”和“str”实例之间不支持“<” 的相关文章

随机推荐

  • Spring Batch corePoolSize VSthrottle-limit

    我想知道两者之间的区别核心池大小 and 油门限制作为定义多线程配置的 Spring Batch 属性 感谢这篇文章 我了解了 corePoolSize 和 maxPoolSize 之间的区别 Spring ThreadPoolTask E
  • RMI 的替代方案

    我有一个小型 Java SE 应用程序 它实际上是一个位于数据库之上的胖客户端 为了进一步提高我的 Java 技能 我决定用它制作一个客户端 服务器应用程序 服务器应用程序与数据库通信并处理各种冗长的操作 而客户端应用程序仅接收结果 主要是
  • 如何在 OCaml 中使用断言?

    我正在尝试学习 OCaml 但在断言语句方面遇到了问题 在解释器中我可以使用它 Zameers MacBook Air zmanji ocaml OCaml version 4 01 0 let x 1 val x int 1 assert
  • 选中时更改标签颜色单选

    我在检查单选按钮后如何将单选按钮的标签文本颜色更改为蓝色时遇到问题 我已经遵循了许多示例代码 但它不起作用 下面是我的html代码 div class input group div
  • 如何在Java中设置JButton的背景颜色?

    我正在开发一个 Java 桌面应用程序 里面我有4个JButtons on a JPanel 现在我希望每当单击一个按钮时 其背景颜色就会更改为其他颜色 例如橙色 以表示它已被单击 并且所有其他 3 个按钮的背景颜色重置为默认颜色 如果其中
  • NoClassDefFoundError:org/hibernate/annotations/common/reflection/MetadataProvider

    我在 pom xml 中定义了依赖项
  • 当其他用户执行Google Web App时,如何查看它的日志记录?

    我使用以下选项部署了我的 Google App Script Webappexecute the app as User accessing the web app 在应用程序脚本仪表板中 我可以看到 Web 应用程序的执行情况和日志记录
  • 为 swig 生成的包装 C++ 的 C# 生成 doxygen 注释

    我有一个用 C 编写的项目 我也使用 swig 生成一些 C 包装器 C 代码使用 Doxygen 样式注释来注释类和函数 是否可以让 Swig 获取这些 doxygen 注释并为 C 包装器类和函数生成 doxygen 注释 目前 SWI
  • python从url保存图像

    当我使用 python 通过 urllib2 请求或 urllib urlretrieve 从 url 保存图像时遇到问题 也就是说该图片的 url 是有效的 我可以使用资源管理器手动下载它 但是 当我使用python下载图像时 该文件无法
  • pandas df 的流数据

    我正在尝试模拟使用 pandas 来访问不断变化的文件 我有一个文件读取 csv 文件 向其中添加一行 然后随机休眠一段时间以模拟批量输入 import pandas as pd from time import sleep import
  • BigQuery:如何将其中一列的类型从 INTEGER 更改为 STRING?

    在 BigQuery 中 假设我有一个包含 X 个字段的现有表 字段 1 当前是整数 但我想将其更改为字符串 我需要保留当前位于字段 1 中的数据 同时能够将字符串数据插入该字段 我认为目前在 Google BigQuery 中不可能修改列
  • Google Drive API 按名称查询返回无效

    根据 Google Drive 文档 要按名称查询文件 您可以使用 q name file name https developers google com drive v3 web search parameters 当我尝试在这里按名称
  • 图表js工具提示如何控制显示的数据

    我正在使用 Chart js 插件并使用按条形视图分组图表 当我将鼠标悬停在一组条形图上时 我可以看到一个工具提示 其中显示了这些条形图的数据 但当我将鼠标悬停在条形数据上时 我如何更改工具提示以显示我唯一的单个数据 我如何显示不同的数据信
  • ASP.NET MVC 3结构-去另一个项目中查看

    我有以下项目设置 项目A 主要 商业 Data 查看 asp net mvc 3 项目 N项目 商业 Data 查看 asp net mvc 3 项目 我如何从项目 A 调用项目 N 中的视图 并从 N 调用回 A 本质上 我想要做的是将每
  • 添加一个钩子来全局记录node.js/express中的所有节点HTTP响应

    我使用 Node js 和 Express 来处理 HTTP 请求和响应 通过使用http ServerRequest事件 我可以添加一个挂钩并记录 HTTP 请求 好像没有类似的活动http ServerResponse我想知道如何使用我
  • C++ 获取处理器 ID

    这个线程没问题 如何获取处理器和主板 ID 我想使用 C 代码而不是使用 WMI 或任何第三方库来获取处理器 ID 或者计算机上任何被证明是唯一的东西 一件事是以太网 ID 但在某些机器上它又是可移除的 我想主要将其用于许可目的 处理器 I
  • iOS7发布后是否还可以向App Store提交针对iOS5或iOS6的应用程序

    就像问题所说的 鉴于 iOS7 现已推出 我是否能够向 App Store 提交 iOS5 iOS6 应用程序 或者我的构建必须以 iOS7 为目标吗 我知道涉及大量的 UI 更改 新功能 看起来不太好等 但我只是想知道是否仍然可以提交旧目
  • 方形图像视图

    我想展示一个ImageView它在对话框内始终是方形的 尺寸可能会根据显示器的分辨率而变化 准确地说是纵向宽度 但 ImageView 需要形成尽可能大的正方形 以在其中容纳正方形图像 这是我的 XML 代码
  • Mule 3:控制是否允许执行流

    我目前的情况 我目前有一个 Mule ESB 应用程序 其中包含三个流 这些流处理来自两个不同源的消息 这三个流使用 VM 队列绑定在一起 Flow 1 入站 端点 1 gt 执行消息处理和转换 gt 出站 端点 3 Flow 2 入站 端
  • 类型错误:“tuple”和“str”实例之间不支持“<”

    我有一个构建哈夫曼树的方法 如下所示 def buildTree tuples while len tuples gt 1 leastTwo tuple tuples 0 2 get the 2 to combine theRest tup