python - SortedSet ValueError 不在列表中
问题描述
我正在使用SortedSet
sortedcontainers库中的一个。该集合包含Match
定义start
用于排序的属性的对象:
class Match:
def __lt__(self, other):
return self.start < other.start
匹配不断地从集合中添加 ( SortedSet.add
) 和丢弃 ( SortedSet.discard
)。
比赛可能有相同的开始。匹配在集合中存在时可能会看到它们的开始发生变化。
在尝试丢弃匹配项时出现以下错误之前,一切似乎都正常工作sortedset.discard(match)
:
ValueError: <Match: X vs Y> not in list
match
存在于集合中,作为match in sortedset
返回True
。没关系,因为它discard
会悄悄地移除。
我完全不知道为什么会发生这种情况,并且我已经尝试了几天的解决方案,但还没有成功。如果我有任何可能出错的线索,我会提供更多信息,但我只是一无所知。请询问您需要的任何信息,我将提供。
解决方案
比赛可能有相同的开始。匹配在集合中存在时可能会看到它们的开始发生变化。
这违反了容器用于跟踪其元素的约束。
当元素在容器中时,您不能更改它的排序顺序。容器无法知道排序顺序已更改。
对象必须不同。
如果您阅读 的文档sortedset
,它会清楚地说明:
值的散列和总排序在存储在排序集中时不得更改。
x != y
您的元素x < y
甚至不存在总排序,因为存在x > y
.你根本没有提到
__hash__
。
我不确定您希望如何解决这些问题,因为我不熟悉您的代码,解决它们可能需要重新设计工作。但是,这些问题是导致程序中出现意外行为的原因。
推荐阅读
- ios - Notifications.getExpoPushTokenAsync 在独立 iOS 上不起作用
- laravel - 如何访问公用文件夹外的js文件?
- python - 如何将图片从 QListview 添加到 QGraphicsView?(使用拖放)
- google-cloud-firestore - 允许用户使用 Firestore 安全规则更新他自己的文档(但不是角色)
- openssl - 为 localhost 设置 ssl wo 一个域
- reactjs - 如何修复 Typescript 中的“对象”类型上不存在“属性“字符串”错误
- c# - '没有 'IEnumerable 类型的 ViewData 项
' 具有键 'IsWorkingID - python - ValueError: bad input shape () when using 'roc_auc' with GridSearchCV
- r - 如何创建单个变量并在列中添加具有新 rnorm 值的新行?
- c++ - 如何使用 opencv 校正立体图像对?