Python collections Counter defaultdict itertools permutations functools lru_cache reduce

from collections import Counter:

from collections import Counter


str = './root//users/yanti/'
res = str.split('/')
print(res)
a = Counter('leetcode')
print(a) #Counter({'e': 3, 't': 1, 'd': 1, 'o': 1, 'l': 1, 'c': 1})
print(a['e']) #3
print(len(a)) #6
for k,v in a.items():
    print(k,v)
# t 1
# d 1
# c 1
# l 1
# e 3
# o 1

for k in a.keys():
    print(k)
# e
# l
# o
# c
# t
# d

print('a' in a) #False
print('e' in a) #True

 

from collections import defaultdict:

from collections import defaultdict

#dic中放一个默认的整数
dic1 = defaultdict(lambda:1900)
dic1['a'] += 1
dic1['b'] += 2
print(dic1) #defaultdict(<function <lambda> at 0x10d265488>, {'a': 1901, 'b': 1902})

#快速build一个trie树
words = ['abc','ac','ab']
add_child = lambda:defaultdict(add_child)
trie = defaultdict(add_child)
for word in words:
    cur = trie
    for ch in word:
        cur = cur[ch]
    cur["$"] = word
print(trie) #defaultdict(<function <lambda> at 0x1026a3598>, {'a': defaultdict(<function <lambda> at 0x1026a3598>, {'c': defaultdict(<function <lambda> at 0x1026a3598>, {'$': 'ac'}), 'b': defaultdict(<function <lambda> at 0x1026a3598>, {'$': 'ab', 'c': defaultdict(<function <lambda> at 0x1026a3598>, {'$': 'abc'})})})})

#查找某个词是否在Trie中
def search(root, word):
    node = root
    for ch in word:
        if (ch in node):
            node = node[ch]
        else:
            return False
    return "$" in node
print(search(trie, "bc")) #False
print(search(trie, "abc")) #True

#defaultdict和原生dict的setdefault操作是一致的,而defaultdict的实现会快,例如以下codes也是一样的trie树
trie2 = {}
for word in words:
    cur = trie2
    for ch in word:
        cur = cur.setdefault(ch,{})
    cur["$"] = word
print(trie2) #{'a': {'c': {'$': 'ac'}, 'b': {'$': 'ab', 'c': {'$': 'abc'}}}}



from itertools import permutations
from itertools import permutations
perms = permutations('123',2)
for perm in perms:
    print(perm)
# ('1', '2')
# ('1', '3')
# ('2', '1')
# ('2', '3')
# ('3', '1')
# ('3', '2')

from functools import lru_cache:

#dfs的时候非常好使
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
    if n < 2:
        return n
    return fib(n-1) + fib(n-2)

print(fib(5)) #5
print(fib.cache_info()) #CacheInfo(hits=29, misses=16, maxsize=None, currsize=16)

from functools import reduce

from collections import Counter
from functools import reduce

class Solution:
    def hasGroupsSizeX(self, deck) -> bool:
        def gcd(x, y):
            while (y):
                x, y = y, x % y
            return x
        counter = Counter(deck)
        return reduce(gcd, counter.values()) >= 2

s = Solution()
print(s.hasGroupsSizeX(deck = [1,2,3,4,4,3,2,1]))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值