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