在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/人工智能  Python  網絡安全/ python里有C++ STL中的set和map嗎?

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

最近在用python3寫leetcode,卻發(fā)現(xiàn)沒有類似C++中的set和map的有序集合。
不知道是我沒找到還是要下載第三方包?這也太麻煩了吧,這么常用的東西竟然沒有內置?

順便再求一下用py寫算法題的其他姿勢和黑科技?

回答
編輯回答
小眼睛

常用么?
dict無序更常用吧。
用的時候再sorted排序也不遲啊。

2017年2月25日 18:06
編輯回答
情未了
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)]

你想實現(xiàn)的東西在上面了,不過復雜度奇高...

真的追求復雜度低的話,樓下的答案其實是正解。你有一個誤區(qū)就是Python list的Access是O(n) 復雜度。但實際上常數(shù)復雜度。
https://wiki.python.org/moin/...

2017年3月23日 08:52