set、tuple、list、dict、OrderedDict

set集合和dict一样:list不可以用来hashmap,所以只能先转为tuple。

tuple的使用

tup1 = (‘physics’, ‘chemistry’, 1997, 2000)
tup2 = (1, 2, 3, 4, 5 )
tup3 = “a”, “b”, “c”, “d”

注意:只有一个元素: 需要在后面添加逗号: a = (1, )
并且tuple不像list,是不可以增减元素的,类似append, pop的操作~~~~但是可以创建一个新的元组 tup3 = tup1 + tup2

所以 做题里经常会遇到 list元素的累积,但是又不想重复的时候,可以先用list进行append, 再转换为tuple放进set集合中。
tuple转list: ll = list(tup1); list 转 tuple: tup1 = tuple(ll)

set集合

set集合是一个无序的不重复元素序列。—目前主要还是用到了这里的不重复~~注意送一个字符串,出来也是一个个的字符哦。

a = set('avbjvbf')
print(a)  # {'j', 'b', 'v', 'a', 'f'}

set集合的运算:

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{
    
    'a', 'r', 'b', 'c', 'd'}
>>> a - b                              # 集合a中包含而集合b中不包含的元素
{
    
    'r', 'd', 'b'}
>>> a | b                              # 集合a或b中包含的所有元素
{
    
    'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b                              # 集合a和b中都包含了的元素
{
    
    'a', 'c'}
>>> a ^ b                              # 不同时包含于a和b的元素
{
    
    'r', 'd', 'b', 'm', 'z', 'l'}

set集合添加元素:

s.add( x )
s.update(x)

set集合删除元素:
s.remove( x )

set集合清空元素:
s.clear()

dict

dict也太熟悉,主要就是记住不可以使用list作为key来使用, value是可以的。
pop是针对key来的,只有pop和popitem可以删除元素。popitem是直接删除掉最后一个添加进来的元素。

a = {
    
    }
a[1] = [1.,2, 3]
print(a)  # {1: [1.0, 2, 3]}
a.pop(1)
print(a) # []

OrderedDict

from collections import OrderedDict
a = OrderedDict()
a[1] = 2
a[2] = 3
a.popitem(last=False)  ## 不删除最后一个,删除第一个 ~~默认是删除最后一个。
print(a)

注意:碰到嵌套函数的情况,必须把dict/list放在函数参数里进行传递,不然容易出现错误。
*# ~~~~不直接传递的结果是完全不同的。原因是sub_out一直在变化*

class Solution:
    def permuteUnique(self , num ):
        # write code here
        if not num:
            return []
        record = {
    
    }
        sub_out = []
        out = set()
        num = sorted(num)
        for i in range(len(num)):
            record[i] = 0
            
        def backtrack(num, sub_out, record):   # ~~~~不直接传递的结果是完全不同的。原因是sub_out一直在变化
            if len(sub_out) == len(num):
                out.add(tuple(sub_out))
                return 
            for i in range(len(num)):
                if record[i] == 1:
                    continue
                    ## 细节决定成败-- i-1 >= 0在前
                if i >= 1 and num[i-1] == num[i] and record[i-1] == 0:
                    continue # 判断重复
                record[i] = 1
                backtrack(num, sub_out+[num[i]], record)
                record[i] = 0
        backtrack(num, [], record)
        out2 = []
        for i in out:
            out2.append(list(i))
        return out2

猜你喜欢

转载自blog.csdn.net/caihuanqia/article/details/113867468
今日推荐