前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python 排序容器

Python 排序容器

作者头像
为为为什么
发布2022-08-09 17:13:17
4530
发布2022-08-09 17:13:17
举报
文章被收录于专栏:又见苍岚

Python 的标准库没有排序容器,这些内容在 sortedcontainers 包中有了实现。

sortedcontainers

Python 标准库没有实现排序容器,在 sortedcontainers 库中有了相关实现。

代码语言:javascript
复制
pip install sortedcontainers

List

SortedList
  • 创建排序列表对象
代码语言:javascript
复制
sortedcontainers.SortedList(iterable=None, key=None)

代码语言:javascript
复制
from sortedcontainers import SortedList

sl = SortedList('fjbcghaeid')
print(sl)
top = sl.pop()
print(list(reversed(sl)))

-->
SortedList(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j'])
['i', 'h', 'g', 'f', 'e', 'd', 'c', 'b', 'a']

SortedKeyList
代码语言:javascript
复制
from sortedcontainers import SortedKeyList

data = [4, 8, -1, -7, 19]
sl = SortedKeyList(data, key=abs)
print(sl)

-->
SortedKeyList([-1, 4, -7, 8, 19], key=<built-in function abs>)

Dict

SortedDict

排序的字典键按排序顺序维护。 sorted dict 的设计很简单:sorted dict 继承自 dict 来存储项目,并维护一个有序的 key 列表。

排序的 dict 键必须是可散列的和可比较的。键的散列和总排序在存储在排序字典中时不得更改。

建立字典

代码语言:javascript
复制
sortedcontainers.SortedDict(*args, **kwargs)
代码语言:javascript
复制
from sortedcontainers import SortedDict

d = {'c': 8, 'd': 4, 'a': 1, 'b': 2}
e = SortedDict([('c', 8), ('d', 4), ('a', 1), ('b', 2)])
print(d == e)
print(e)

-->
True
SortedDict({'a': 1, 'b': 2, 'c': 8, 'd': 4})

SortedKeysView

sortedcontainers.SortedKeysView(mapping)

  • 排序键视图是排序字典键的动态视图。
  • 当排序后的 dict 的键发生变化时,视图会反映这些变化。
  • 键视图实现集合和序列抽象基类。
  • 参考代码
代码语言:javascript
复制
from sortedcontainers import SortedDict

e = SortedDict([('c', 8), ('d', 4), ('a', 1), ('b', 2)])
print(e.keys())
view = e.keys()
del view[0]
print(view)
del view[-1]
print(view)
del view[:]
print(view)

-->
SortedKeysView(SortedDict({'a': 1, 'b': 2, 'c': 8, 'd': 4}))
SortedKeysView(SortedDict({'b': 2, 'c': 8, 'd': 4}))
SortedKeysView(SortedDict({'b': 2, 'c': 8}))
SortedKeysView(SortedDict({}))

SortedItemsView

sortedcontainers.SortedItemsView(mapping)

  • 排序项目视图是排序字典项目的动态视图。
  • 当排序的 dict 的项目发生变化时,视图会反映这些变化。
  • 项目视图实现集合和序列抽象基类。
  • 参考代码:
代码语言:javascript
复制
from sortedcontainers import SortedDict

e = SortedDict([('c', 8), ('d', 4), ('a', 1), ('b', 2)])
siv = e.items()
print(siv)
print(siv[0])
print(siv[-1])

del siv[0]
print(siv[:])

-->
SortedItemsView(SortedDict({'a': 1, 'b': 2, 'c': 8, 'd': 4}))
('a', 1)
('d', 4)
[('b', 2), ('c', 8), ('d', 4)]

SortedValuesView

sortedcontainers.SortedValuesView(mapping)

  • 排序值视图是排序字典值的动态视图。
  • 当排序后的 dict 的值发生变化时,视图会反映这些变化。
  • 值视图实现了序列抽象基类。
  • 参考代码:
代码语言:javascript
复制
from sortedcontainers import SortedDict

e = SortedDict([('c', 8), ('d', 4), ('a', 1), ('b', 2)])
svv = e.values()

print(svv[0])
print(svv[-1])

del svv[0]
print(svv[:])
print(e)
pass

-->
1
4
[2, 8, 4]
SortedDict({'b': 2, 'c': 8, 'd': 4})

Set

Sorted Set
代码语言:javascript
复制
from sortedcontainers import SortedSet

ss = SortedSet([-3, 1, 2, -5, 4])
print(ss)

qq = SortedSet(ss, key=abs)
print(qq)


-->
SortedSet([-5, -3, 1, 2, 4])
SortedSet([1, 2, -3, 4, -5], key=<built-in function abs>)

参考资料

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年5月15日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • sortedcontainers
  • List
    • SortedList
      • SortedKeyList
      • Dict
        • SortedDict
          • SortedKeysView
            • SortedItemsView
              • SortedValuesView
              • Set
                • Sorted Set
                • 参考资料
                相关产品与服务
                容器服务
                腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档