python里有C++ STL中的set和map吗?

发布于 2022-09-06 06:22:21 字数 130 浏览 16 评论 0

最近在用python3写leetcode,却发现没有类似C++中的set和map的有序集合。
不知道是我没找到还是要下载第三方包?这也太麻烦了吧,这么常用的东西竟然没有内置?

顺便再求一下用py写算法题的其他姿势和黑科技?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

你穿错了嫁妆 2022-09-13 06:22:21
from collections import OrderedDict

这样?


修改:

from bisect import insort
import numpy as np

class SortedDict():
    def __init__(self, init_dict=None):
        if init_dict:
            self._dict = init_dict
            self.keys = init_dict.keys()
            self.key_set  = set(self.keys)
        else:
            self._dict = dict()
            self.keys = list()
            self.key_set = set()
        
    def add(self, key, value):
        self._dict[key] = value
        if key not in self.key_set:
            insort(self.keys, key)
        self.key_set.add(key)
        
    def __getitem__(self, key):
        return self._dict[key]
    
    def full_dict(self):
        return self._dict
    
    def get_top_results(self, top_num):
        tmp_key_list = np.array(self.keys[:top_num])
        return map(lambda i: (i, self._dict[i]), tmp_key_list)
        
        
# Demo

test_dict = SortedDict()
test_dict.add(1, 1)
test_dict.add(1, 1)
test_dict.add(2, 1)
test_dict.add(3, 1)
test_dict.add(29, 1)
test_dict.add(346, 1)
test_dict.add(6, 1)
test_dict.add(9, 1)

result = list(test_dict.get_top_results(6))
print(result)
# Output: [(1, 1), (2, 1), (3, 1), (6, 1), (9, 1), (29, 1)]

你想实现的东西在上面了,不过复杂度奇高...

真的追求复杂度低的话,楼下的答案其实是正解。你有一个误区就是Python list的Access是O(n) 复杂度。但实际上常数复杂度。
https://wiki.python.org/moin/...

对岸观火 2022-09-13 06:22:21

常用么?
dict无序更常用吧。
用的时候再sorted排序也不迟啊。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文