您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python集具有弹出随机元素的功能

Python集具有弹出随机元素的功能

我认为最好的方法是在中使用MutableSet抽象基类collections。继承MutableSet,然后定义adddiscard__len__,__iter__,和__contains__; 也重写,__init__以选择接受序列,就像set构造函数一样。MutableSet提供set基于这些方法的所有其他方法的内置定义。这样,您便可以set廉价获得完整的接口。(如果执行此操作,addIterable则在名称下为您定义extend。)

discard在标准set界面中似乎就是您在delete这里所说的。因此,将其重命名deletediscard。同样,除了拥有一个单独的popRandom方法,您可以popRandom像这样定义:

def popRandom(self):
    item = self.getRandom()
    self.discard(item)
    return item

这样,您不必维护两种单独的项目删除方法

最后,在项目删除方法中(delete现在,discard根据标准set接口),您不需要if语句。无需测试是否index == len(self.list) - 1,只需将列表中的最后一项与要弹出的列表的索引处的项交换,然后对反向索引字典进行必要的更改。然后从列表中弹出最后一项,并将其从字典中删除。无论是否index == len(self.list) - 1

def discard(self, item):
    if item in self.dict:
        index = self.dict[item]
        self.list[index], self.list[-1] = self.list[-1], self.list[index]
        self.dict[self.list[index]] = index
        del self.list[-1]                    # or in one line:
        del self.dict[item]                  # del self.dict[self.list.pop()]
python 2022/1/1 18:50:00 有358人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶